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.
Voici à quoi cela ressemble maintenant dans mon code.
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>
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>
Je suppose que vous utilisez un LinearLayoutManager
avec un RecyclerView
pour un effet de style ListView
. Dans ce cas, utilisez un horizontal
LinearLayout
pour chaque ligne, avec Android:gravity="center"
pour centrer son contenu.
vous pouvez ajouter des mises en page dynamiquement, par exemple:
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
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>
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.
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