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.
voici à quoi ça ressemble maintenant dans mon code.
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>
Faire recyclerview width
layout_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>
je suppose que vous utilisez un LinearLayoutManager
avec un RecyclerView
ListView
-effet de style. Dans ce cas, utiliser un horizontal
LinearLayout
pour chaque ligne, avec android:gravity="center"
pour centrer son contenu.
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
vous pouvez utiliser le nouveau layoutManager de google FlexLayoutManager il vous donnera beaucoup de contrôle et de flexibilité sur les articles recyclerView
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.
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