web-dev-qa-db-fra.com

RecyclerView GridLayoutManager avec en-tête pleine largeur

J'utilise un exemple très utile ici pour afficher un RecyclerView et un GridLayoutManager pour afficher une grille avec un en-tête.

Il semble assez bon, mais mon graphiste veut que l'élément d'en-tête occupe toute la largeur du RecyclerView. À l'heure actuelle, il y a un rembourrage.

Lorsque je configure le GridLayoutManager, j'ajoute du rembourrage (que je veux toujours pour les autres éléments de la grille): [il utilise Xamarin C #]

var numColumns = myListView.MeasuredWidth / tileSizeMax;
myGridView.SetPadding(tilePadding, tilePadding, tilePadding, tilePadding);
layoutManager = new GridLayoutManager(Activity, numColumns);
myListView.SetLayoutManager(layoutManager);

Alors, comment puis-je définir un rembourrage différent pour l'élément d'en-tête ... ou le faire se dessiner sur le rembourrage?

24
Kibi

Essayez avec ceci:

mLayoutManager = new GridLayoutManager(this, 2);
        mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                switch(mAdapter.getItemViewType(position)){
                    case MyAdapter.HEADER:
                        return 2;

                    case MyAdapter.ITEM:
                        return 1;

                    default:
                        return 1;
                }
            }
        });

Et vérifiez ces liens:

http://blog.sqisland.com/2014/12/recyclerview-grid-with-header.htmlDéfinir l'intervalle pour les éléments dans GridLayoutManager à l'aide de SpanSizeLookup

57
Alex