【问题标题】:Android: how to implement grid with different columns/rows sizeAndroid:如何实现具有不同列/行大小的网格
【发布时间】:2016-07-25 14:03:26
【问题描述】:

我需要实现这样的东西:

看起来像 StaggeredGridLayoutManager | GridLayoutManager 做不到, 目前如何实现?

GridView 性能好?

【问题讨论】:

    标签: android android-gridview gridlayoutmanager


    【解决方案1】:

    您可以使用twoway-view 实现这种 RecyclerView 行为

    我测试了这个库的 1.0.0-SNAPSHOT 版本。

    这是一个旧项目(不再维护),但它可以帮助您编写自己的 RecyclerView/LayoutManager。

    布局示例

    在 RecyclerViewAdapter 中需要设置 span 逻辑:

    @Override
     public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            super.onBindViewHolder(holder, position);
            final SpannableGridLayoutManager.LayoutParams lp =
                    (SpannableGridLayoutManager.LayoutParams) holder.itemView.getLayoutParams();
    
            final int span1;
            final int span2;
            if (position == 0) {
                span1 = 2;
                span2 = 2;
            } else if (position == 3) {
                span1 = 2;
                span2 = 3;
            } else {
                span1 = 1;
                span2 = 1;
            }
    
            final int colSpan = (span2);
            final int rowSpan = (span1);
    
            if (lp.rowSpan != rowSpan || lp.colSpan != colSpan) {
                lp.rowSpan = rowSpan;
                lp.colSpan = colSpan;
                holder.itemView.setLayoutParams(lp);
            }
    }
    

    我使用了库中的自定义 RecyclerView (TwoWayView):

    <org.lucasr.twowayview.widget.TwoWayView
            android:id="@+id/fragment_drawer_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="60dp"
            android:clipToPadding="false"
            android:paddingBottom="32dp"
            app:twowayview_layoutManager="SpannableGridLayoutManager"
            app:twowayview_numColumns="3"
            app:twowayview_numRows="3" />
    

    结果截图:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2015-05-03
      • 2020-09-07
      相关资源
      最近更新 更多