全宽的 RecyclerView GridLayoutManager header

RecyclerView GridLayoutManager with full width header

我正在使用一个非常有用的示例 here 来显示 RecyclerView 和 GridLayoutManager 来显示带有 header 的网格。

看起来不错,但我的图形设计师希望 header 项目占据 RecyclerView 的整个宽度。现在有填充。

当我设置 GridLayoutManager 时,我添加了填充(我仍然想要其他网格项):[它使用 Xamarin C#]

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

那么,如何为 header 项目设置不同的内边距...或者让它自己绘制在内边距上?

试试这个:

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:
                    default:
                        return 1;
                }
            }
        });

并检查这些链接:

你可以做到

val spanSize = 2
val mLayoutManager = GridLayoutManager(yourContext, spanSize)
mLayoutManager.spanSizeLookup = object : SpanSizeLookup() {
    override fun getSpanSize(position: Int): Int = when (position) {
        0 -> spanSize
        else -> 1
    }
}