Placer plusieurs colonnes avec RecyclerView

Donc, ce que j’essaie de faire est d’avoir une mise en page échelonnée, mais le premier élément de la liste doit couvrir deux colonnes. Les deux premières lignes sont également une hauteur fixe. Tout fonctionne sauf le premier élément couvrant deux colonnes.

J’utilise le RecyclerView.Adapter avec le StaggeredGridLayoutManager. Cela ne semble pas être une fonctionnalité hors de la boîte. Je suppose que je peux créer un gestionnaire de disposition personnalisé, mais je ne sais pas par où commencer. J’ai essayé de chercher mais je ne trouve rien sur la façon d’obtenir des éléments sur plusieurs colonnes.

L’image ci-dessous est ce que je recherche dans la liste.

Disposition décalée

Actuellement, StaggeredGridLayoutManager ne prend en charge que les vues couvrant toutes les colonnes (pour une présentation configurée verticalement), et non un nombre arbitraire d’entre elles.

Si vous souhaitez toujours les répartir sur toutes les colonnes, vous devez le faire dans l’implémentation de l’adaptateur:

 public final void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams(); layoutParams.setFullSpan(true); } 

IMHO, StaggeredGridLayoutManager est encore en plein développement et Google veut que nous l’utilisions pour les commentaires 🙁

Ce que j’ai fait pour étendre toutes les colonnes d’une disposition configurée verticalement, c’est de créer un nouveau LayoutParams et de définir full span sur true dans l’implémentation de l’adaptateur:

 @Override public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, int position) { StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); layoutParams.setFullSpan(true); viewHolder.itemView.setLayoutParams(layoutParams); }