Comment centrer les articles d'une recyclerview?

je dois centrer les éléments dans chaque rangée pour qu'ils soient comme dans cette maquette. J'ai cherché s'il y a une disposition qui fonctionne de cette façon sans regarder. les articles sont centrés dans leurs lignes.

mockup

voici à quoi ça ressemble maintenant dans mon code.enter image description here

34
demandé sur Cristian Gomez 2015-05-03 01:00:35

7 réponses

LinearLayout dans votre RecyclerView's de l'élément de ligne de mise en page, puis donner android:layout_gravity="center"LinearLayout.

pour chaque ligne d'images vous devez prendre différent LinearLayout.

Voici un exemple de code:

 <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
         android:orientation="horizontal">

            <ImageView
                android:id="@+id/image1"
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:src="@drawable/image1" />

            <ImageView
                android:id="@+id/image2"
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:src="@drawable/image2" />

           <ImageView
                android:id="@+id/image3"
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:src="@drawable/image3" />

  </LinearLayout>
28
répondu Rajesh 2017-07-10 09:10:23

Faire recyclerview widthlayout_gravitycenter_horizontal

 <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical">

      <android.support.v7.widget.RecyclerView
           android:id="@+id/recycrer_view"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="center_horizontal"
           android:paddingLeft="16dp"
           android:paddingRight="16dp" />
 </LinearLayout>
23
répondu Ravi Yadav 2018-02-14 08:12:21

je suppose que vous utilisez un LinearLayoutManager avec un RecyclerViewListView-effet de style. Dans ce cas, utiliser un horizontalLinearLayout pour chaque ligne, avec android:gravity="center" pour centrer son contenu.

8
répondu CommonsWare 2015-05-02 22:01:20

vous pouvez ajouter quelques dispositions dynamiquement, par exemple:

  • l'objet adaptateur peut être un affichage linéaire horizontal

1-Créer un affichage en ligne en code java et le personnaliser (gravity,...)

2-ajouter quelques icônes à linearLayout

3-Ajouter linearLayout à votre adaptateur

4 - répéter 1,2,3


    // : declare new horizontal linearLayout
    ImageView myIcons[nomOfIcons];
    // : add all icons to myIcons
    for(int i=1; i<=nomOfIcons; i++){
        linearLayout.addView(myIcons[i - 1]);
        if(i%numOfIconsInOneHorizontalLinearLayout==0) {
            results.add(linearLayout); // add linearLayout to adapter dataSet
            // : declare new horizontal linearLayout
        }
    }
    if(n%numOfIconsInOneHorizontalLinearLayout!=0) // add last linearLayout if not added in the loop
        results.add(linearLayout);
    mAdapter.notifyDataSetChanged(); // update adapter

3
répondu Misagh 2016-01-17 09:12:05

vous pouvez utiliser le nouveau layoutManager de google FlexLayoutManager il vous donnera beaucoup de contrôle et de flexibilité sur les articles recyclerView

1
répondu Omar Abdan 2017-08-17 09:22:25

gridLayoutManager = new GridLayoutManager(context,6) et remplacer setSpanSizeLookup.

Exemple:

int totalSize=list.size();
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                    @Override
                    public int getSpanSize(int position) {
                        int span;
                        span = totalSize % 3;
                        if (totalSize < 3) {
                            return 6;
                        } else if (span == 0 || (position <= ((totalSize - 1) - span))) {
                            return 2;
                        } else if (span == 1) {
                            return 6;
                        } else {
                            return 3;
                        }
                    }
                });

cela fonctionnera si vous voulez afficher 3 éléments dans une rangée et rester dans le centre de la grille.

modifier le gestionnaire de mise en page de la grille compte en conséquence votre exigence.

0
répondu Rahul Devanavar 2016-12-31 07:37:46

mettez votre recyclerview dans linearlayout en xml. et l'utilisation (pour les deux recyclerview et linearlayout)

android:layout_gravity="center"

et la largeur de recyclerview devrait être wrap_content tandis que linearlayout devrait avoir math_parent et vous devez spécifier la largeur de votre row_item

-1
répondu Sadashiv 2015-10-14 09:30:30