RecycleView的跨度大小

时间:2015-06-17 10:36:32

标签: android android-recyclerview gridlayoutmanager

enter image description here

我正在尝试实现类似于上图的布局 将RecyclerView与GridLayoutManager结合使用,我尝试根据位置设置setSpanSizeLookup,但无法模仿上面的设计..

有人可以帮忙吗?

    mRecyclerView = (RecyclerView) contentView;
    mRecyclerView.setHasFixedSize(false);

    GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 3);
    gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            return 3 - (position % 3);
        }
    });

    mRecyclerView.setLayoutManager(gridLayoutManager);

...

我得到了什么 enter image description here

4 个答案:

答案 0 :(得分:1)

嗯,你想要替代"行"在两个细胞之间均匀分开。均匀分割需要偶数列,而3不是偶数。所以,将其更改为2。

现在,您希望getSpanSize()返回(按行):

  • 位置0 = 2(即,跨越两个单元)
  • 位置1和2 = 1(即,每个占据一个单元)
  • 位置3 = 2
  • 位置4和5 = 1

(position % 3) > 0 ? 1 : 2似乎会给你这个。

答案 1 :(得分:0)

 Try this i tried it for you



val spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
                    override fun getSpanSize(position: Int): Int {
                        if (position == 0) {
                            return 2
                        } else if (position == 1 || position == 2)
                            return 1
                        else if (position == 3)
                            return 2
                        else return 1

    }
    }

     val glm = GridLayoutManager(this, 2)

                glm.spanSizeLookup = spanSizeLookup
                recycler_view.layoutManager = glm

答案 2 :(得分:0)

好的,我找到了首先制作此布局的解决方案  像这样的GrideLayoutManager。

GrideLayoutManager gridLayoutManager = new GridLayoutManager(context,2 , LinearLayoutManager.VERTICAL ,false) ;

在这里你告诉android一行将包含2个span 然后像这样制作getSpanSize。

gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
    @Override
    public int getSpanSize(int position) {

        return  position % 3 == 0 ? 2: 1  
   }
});

这使得每个位置除以3占据2个跨度(一行)

答案 3 :(得分:-2)

您可以将以下内容添加到onCreate()

   GridLayoutManager layoutManager=new GridLayoutManager(this,10);
    layoutManager.setSpanSizeLookup(new 
    GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {

            int index = position % 2;

            switch(index){
                case 0: return 1;
                case 1: return 2;
                }
         }
  }

之后设置layoutmanager到recyclerview

recyclerview.setLayoutManager(layoutManager);