Android:如何实现具有不同列/行大小的网格

我需要实现这样的事情:

《Android:如何实现具有不同列/行大小的网格》

好像是StaggeredGridLayoutManager | GridLayoutManager无法做到,
现在该如何实现?

GridView有很好的表现吗?

最佳答案 您可以使用
twoway-view实现这种RecyclerView行为

我测试了这个lib的1.0.0-SNAPSHOT版本.

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

布局示例

在RecyclerViewAdapter中,您需要设置范围逻辑:

@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" />

结果截图:
《Android:如何实现具有不同列/行大小的网格》

点赞