LayoutManager pour RecyclerView Grille avec différentes largeur de la cellule
StaggeredGridLayoutManager
ne semble pas permettre la personnalisation d'un largeur de la cellule ou s'étendre sur plusieurs colonnes (à l'exception de pleine échelle) pour l'orientation verticale.
Ce qui est un préféré LayoutManager
pour l'organisation de cellules comme indiqué ci-dessus?
P. S. je veux juste savoir comment personnaliser largeur de la cellule et pas la hauteur avec StaggeredGridLayoutManager
. Je sais que la taille peut être personnalisée en tant que mis en œuvre dans ce l'échantillon.
public class VerticalStaggeredGridFragment extends RecyclerFragment {
public static VerticalStaggeredGridFragment newInstance() {
VerticalStaggeredGridFragment fragment = new VerticalStaggeredGridFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
protected RecyclerView.LayoutManager getLayoutManager() {
return new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
}
@Override
protected RecyclerView.ItemDecoration getItemDecoration() {
return new InsetDecoration(getActivity());
}
@Override
protected int getDefaultItemCount() {
return 100;
}
@Override
protected SimpleAdapter getAdapter() {
return new SimpleStaggeredAdapter();
}
}
Adaptateur
public class SimpleStaggeredAdapter extends SimpleAdapter {
@Override
public void onBindViewHolder(VerticalItemHolder itemHolder, int position) {
super.onBindViewHolder(itemHolder, position);
final View itemView = itemHolder.itemView;
if (position % 4 == 0) {
int height = itemView.getContext().getResources()
.getDimensionPixelSize(R.dimen.card_staggered_height);
itemView.setMinimumHeight(height);
} else {
itemView.setMinimumHeight(0);
}
}
}
itemView.setMinimumWidth(customWidth)
n'affecte pas la largeur de la cellule.
Pour simplifier, je mettre à jour ma présentation de la grille de
Comment augmenter la cellule 0 largeur par rapport à la cellule 1 dans un StaggeredGridLayoutManager
ou tout autre gestionnaire de mise en page?
OriginalL'auteur random | 2016-04-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
StaggeredGridLayoutManager.LayoutParams
de changer la largeur et la hauteur des cellules, de Ce que vous pensez de la conception suit un modèle simple, Si vous attribuez à chaque cellule d'un index (dans l'ordre queStaggeredGridLayoutManager
les range par défaut), vous aurez ceci:d'abord déclarer des constantes dans l'adaptateur pour définir la durée de types:
Ensuite remplacer
getItemViewType
méthode de votre carte comme ceci:Tout ce que vous devez faire est de changer layoutparams considérant
viewType
de laholder
:Mon adaptateur retourne toujours 50 pour les éléments de comptage(juste un test) et j'ai utilisé un simple fichier de mise en page pour les articles, Il contient un
LinearLayout
et unTextView
pour montrer la position de titulaire, n'oubliez pas que vous devriez passer 2 pourspanCount
(int laStaggeredGridLayoutManager
constructeur), en raison de la conception de votre.PS:
Pour les paresseux comme moi peut-être que c'est une façon plus simple plutôt que de l'étendre à mon habitude
LayoutManager
, Mais je suis sûr qu'il y a de meilleures façons d'atteindre cet objectif.Mise à jour:
Mise à jour de la partie de votre question est plus simple, Vous pouvez utiliser
GridLayoutManager
:De cette façon, vous 3 pour la période par défaut de la taille, Puis la prise en compte de la position de votre durée de Chaque élément occupe 1, 2 ou 3 travées, quelque Chose comme ceci:
C'est exactement ce que j'ai fait si vous cochez onCreateViewHolder méthode.
Pouvez-vous mettre à jour de code dans votre réponse à la grille de l'image que j'ai fournis? Je ne vais pas être en mesure d'essayer votre solution jusqu'à demain.
Merci beaucoup!! La dernière partie sur gridlayout résolu mon problème 🙂
C'était super grande aide. Shout out à des communautés ouvertes 😀
OriginalL'auteur ҒάгՏҺαԃ ッ
Pour tout le monde, à la recherche d'une solution sans simplifier votre mise en page, vous pouvez jeter un oeil à ma réponse ici, ou vous pouvez en lire plus.
Grand merci à Nick Boucher! Son directeur de disposition appelé
SpannableGridLayoutManager
est capable de le faire.Télécharger SpannableGridLayoutManager à partir d'ici
Pour une raison quelconque, j'ai dû changer cette ligne:
à
ai le manager de travail.
Ensemble SpannableGridLayoutManger à votre RecyclerView
Dans votre cas:
Qui vous donnera exactement ce qui est la première photo de la question.
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getTop()' on a null object reference
Où Pouvez-vous me dire où? Qui fichier sur quelle ligne?
fichier:
SpannableGridLayoutManger
, pas de ligne exacte. Si vous voulez je peux joindre mon stacktrace pour que l'exception.vous pouvez mettre votre stacktrace de Pastebin et de partager l'url
OriginalL'auteur kristyna