5

在此处输入图像描述

我正在尝试使用 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);

..

我得到了什么
在此处输入图像描述

4

5 回答 5

7

好吧,您希望交替的“行”在两个单元格之间均匀分布。均匀拆分需要偶数列,3 不是偶数。因此,将其更改为 2。

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

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

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

于 2015-06-17T11:07:28.463 回答
1

我解决了。这是我的代码,您将获得相同的所需输出

GridLayoutManager mLayoutManager = new GridLayoutManager(this, 2);

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

            int i = 3 - (position % 3);

            switch(i){
                case 1:
                    return 1;
                case 2:
                    return 1;
                case 3:
                    return 2;
                default:    
                    return 2; \\Optional Since it will not have a default case with the given formula
            }
于 2017-05-08T10:50:56.360 回答
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
于 2018-03-19T07:29:50.590 回答
0

好的,我找到了获得这个布局的解决方案,首先让 GridLayoutManager 像这样。

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

在这里,您告诉 android 一行将包含 2 个跨度,然后像这样制作 getSpanSize。

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

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

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

于 2018-05-04T10:59:53.307 回答
-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);
于 2016-01-21T05:11:32.107 回答