如何制作这个自定义"网格" Android中的布局?

时间:2017-02-14 21:00:33

标签: android android-layout android-recyclerview

enter image description here

enter image description here

我需要9 square个单元格,然后是long rectangle单元格,然后再次9 square单元格。我应该如何设置LinearLayoutManager将其传递给RecyclerView

我试过两种方式:

LinearLayoutManager llm2 = new LinearLayoutManager(App.getContext());
llm2.setOrientation(LinearLayoutManager.VERTICAL);

但是这里所有项目都在一个单独的行中。

如果我将它设置为.HORIZONTAL,那么所有元素都将在一个长行中。

尝试GridLayoutManager

RecyclerView.LayoutManager glm = new GridLayoutManager(App.getContext(), 3);

但是这里不知道如何处理长项目。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你可以在每9个项目之后使用setSpanCount,你将得到一行是一个单元格。

所以基本上你必须把你传入适配器的数组放入"空项"这将表示一个完整的行,因为recyclerview仍然需要知道显示它

示例:

阵列

[data,data,data,data,data,data,data,data,data,"",data,data,etc...]

答案 1 :(得分:0)

您可以创建一个跨度为3的GridLayoutManager,并在spanSizeLookup中为“long元素”返回大小3:

    final int spanCount = 3;

    GridLayoutManager glm = new GridLayoutManager(this, spanCount);
    recyclerView.setLayoutManager(glm);

    glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            // You could also use adapter.getItemViewType(position) and check if
            // the type of the view is "LONG_VIEW" instead of using a modulo
            if (position % 10 == 9) {
                return spanCount;
            } else {
                return 1;
            }
        }
    });