如何在 GridLayoutManager 中准备 setSpanSizeLookup

Posted

技术标签:

【中文标题】如何在 GridLayoutManager 中准备 setSpanSizeLookup【英文标题】:How to prepare setSpanSizeLookup in GridLayoutManager 【发布时间】:2020-12-10 01:27:59 【问题描述】:

我需要每 18,36,54,...18*Nth... 网格布局,宽度:匹配父级和高度:60dp 在网格布局管理器中用于分页加载栏目的。

这是我的代码,

 GridLayoutManager mng_layout = new GridLayoutManager(this, 4);//WHAT IS 4 ?//
            mng_layout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() 
                @Override
                public int getSpanSize(int position) 
                    int mod = position % 6;   //WHAT IS 6 ?//
    
                    if (position == 0 || position == 1)
                        return 2;    //WHAT IS 2 ?//
                    else if (position < 6)
                        return 1;   //WHAT IS 1 ?//
                    else if (mod == 0 || mod == 1)
                        return 2;   //WHAT IS 2 ?//
                    else
                        return 1;   //WHAT IS 1 ?//
                
            ); 

如果有人有时间,请解释代码中的注释行

【问题讨论】:

【参考方案1】:

跨度大小表示此项目从网格中占用多少个单元格

public int getSpanSize(int position) 
                int mod = position % 6;   //here 18%6=0 ,19%6=1 ,36%6=0 ,37%6=1 and so one    
                if (position == 0 || position == 1)
                    return 2;    // if this is the first or sesond items make it take span size of 2 so 4/2 =2 cells will be shows
                else if (position < 6)
                    return 1;   // here 2,3,4,5 < 6 so every item should take span size 1 out of 4 , so we have 4 cells 
                else if (mod == 0 || mod == 1)
                    return 2;   // here we check the mode which is defined above 18,19 & 36,37 ,54,55 and so on every pair will span 2 cells for every number 
                else
                    return 1;   // any thing other like  will take one span out of 4 grid columns 
            
        

你可以看看这个tutorial

【讨论】:

以上是关于如何在 GridLayoutManager 中准备 setSpanSizeLookup的主要内容,如果未能解决你的问题,请参考以下文章

如何在recyclerview的gridLayoutManager中从cardview中删除右边距

如何在 GridLayoutManager 中设置项目行的高度

如何使用垂直 GridLayoutManager 水平居中 RecyclerView 项目

GridLayoutManager 如何在下一行显示不同的视图类型

如何将gridlayoutManager每列的宽度设置为wrapContent在android中不固定大小

如何摆脱 GridLayoutManager 项目之间的差距