web-dev-qa-db-fra.com

Comment centrer les articles d'un 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 avait une mise en page qui fonctionne de cette façon sans regarder. les articles sont centrés dans leurs rangées.

mockup

Voici à quoi cela ressemble maintenant dans mon code.enter image description here

43
Cristian Gomez

Prenez LinearLayout dans la disposition de la ligne de votre article RecyclerView puis donnez Android:layout_gravity="center" à LinearLayout.

Pour chaque rangée d'images, vous devez utiliser différents 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>
31
Rajesh

Faites recyclerview width à wrap_content et son conteneur layout_gravity à center_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>
40
Ravi Yadav

Je suppose que vous utilisez un LinearLayoutManager avec un RecyclerView pour un effet de style ListView. Dans ce cas, utilisez un horizontalLinearLayout pour chaque ligne, avec Android:gravity="center" pour centrer son contenu.

8
CommonsWare

vous pouvez ajouter des mises en page dynamiquement, par exemple:

  • objet adaptateur peut être un LinearLayout horizontal

1- créez un LinearLayout dans Java et personnalisez-le (gravité, ...)

2- ajouter des 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
Misagh

Utilisez FlexboxLayout de com.google.Android:flexbox bibliothèque. Notez les valeurs de propriété flexwrap et justifyContent. Ensuite, définissez layout_wrapBefore = true sur la vue sur laquelle vous souhaitez placer la ligne d’éléments avant.

    <com.google.Android.flexbox.FlexboxLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:flexWrap="wrap"
        app:justifyContent="center">

        <View ... />

        <View app:layout_wrapBefore="true" ... />

        <View ... />

    </com.google.Android.flexbox.FlexboxLayout>
3
ersin-ertan

Utilisez le gridLayoutManager = new GridLayoutManager(context,6) et remplacez 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 souhaitez afficher 3 éléments dans une rangée et rester au centre de la grille.

Modifiez la durée du gestionnaire de disposition de grille en fonction de vos besoins.

2
Rahul Devanavar

vous pouvez utiliser le nouveau layoutManager à partir de Google FlexLayoutManager cela vous donnera beaucoup de contrôle et de flexibilité sur les éléments recyclerView

1
Omar Abdan