2016-09-24 1 views
0

J'ai un recyclerView avec un gridManagerLayout comme ceci:Puis-je définir des largeurs de colonnes dynamiques dans GridManagerLayout dans Android?

GridLayoutManager manager = new GridLayoutManager(Main.this, 10); 
manager.setOrientation(LinearLayoutManager.VERTICAL); 
recyclerView.setLayoutManager(manager); 

Est-il possible de définir différentes largeurs à chaque colonne? J'essaye de réaliser quelque chose comme ceci: enter image description here

Comme vous pouvez voir les colonnes 0, 2, 4, 6 et 8 doivent être plus petites que les autres.

J'ai essayé manager.setSpanSizeLookup(spanSizeLookup), mais je ne veux pas changer le spanCount du layout manager.

C'est ce que j'ai en ce moment enter image description here

Je suis en train de la largeur de chaque support dans le constructeur en appelant itemView.getLayoutParams() width = THE_WIDTH.

Il semble que les lignes jaunes sont à leur place, je ne sais pas pourquoi les autres ont un décalage

C'est le XML pour l'image

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 

<ImageView 
    android:id="@+id/image" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:adjustViewBounds="true" 
    android:layout_centerHorizontal="true" 
    android:layout_above="@+id/text" 
    android:scaleType="centerCrop"/> 

<TextView 
    android:id="@+id/text" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Category name" 
    android:layout_alignParentBottom="true" 
    android:gravity="center" 
    android:background="#7f007f"/> 

</RelativeLayout> 

Et c'est le xml pour la espace entre eux

<?xml version="1.0" encoding="utf-8"?> 
<View xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="25dp" 
android:layout_height="match_parent" 
android:background="#ffff00"/> 

Répondre

0

Dans votre adaptateur, définissez dynamiquement la largeur de l'élément à l'aide de layout.params, par exemple.

tv.setLayoutParams(new ViewGroup.LayoutParams(
10, 
ViewGroup.LayoutParams.WRAP_CONTENT)); 

Vérifiez,

if(position%2==0) { 
your_item_parent_layout.setLayoutParams(new ViewGroup.LayoutParams(
10, 
ViewGroup.LayoutParams.WRAP_CONTENT)); 
} 
else{ 
your_item_parent_layout.setLayoutParams(new ViewGroup.LayoutParams(
100, 
ViewGroup.LayoutParams.WRAP_CONTENT)); 
} 

dans votre adaptateur.

Espérons que ça aide.

+0

télécharger votre deux fichiers xml aussi –

0

Pour que vous devez utiliser getItemViewType méthode de votre Adapter et que vous devez envoyer votre type de mise en page et en onCreateViewHolder vous devez inflate votre layouts selon votre type. Et vous pouvez définir width et height à vos deux différents layouts comme le montre la capture d'écran

+0

que je fais déjà dans le constructeur de chaque porte, selon son type. – kimv

+0

@kimv alors où est le problème? Ça devrait bien marcher – Nikhil