gpt4 book ai didi

android - 在水平 RecyclerView 中添加垂直列

转载 作者:行者123 更新时间:2023-11-29 15:12:22 24 4
gpt4 key购买 nike

我在我的项目中创建了一个水平的RecyclerView。我想要具有不同大小的水平行和多个垂直列,并且每个列包含不同数量的行,如下图:

enter image description here

水平行数是可变的。第一列可以有四行,第二列可以有三四行……列数也是可变的。

结果就像电视指南,列是 channel ,行是发射。只是这不是电视指南 xD

我用这种方式完成了水平行:

LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);

recyclerView.setLayoutManager(layoutManager);


public class SimpleAdapter extends RecyclerView.Adapter<SimpleAdapter.VerticalItemHolder>{

@Override
public void onBindViewHolder(VerticalItemHolder itemHolder, int position) {
Item item = arrayItems.get(position);

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, item.getSizeRow(), root.getResources().getDisplayMetrics());

ViewGroup.LayoutParams params = root.getLayoutParams();
if (params == null) {
params = new ViewGroup.LayoutParams(heigth, width);
} else {
params.width = width;
params.height = heigth;
}

root.setLayoutParams(params);
}

结果是这样的:

enter image description here

但我无法让某些项目显示在垂直列中。它是如何完成的?谢谢

最佳答案

回答自 hereRecyclerView

中使用 Variable span size

使用 GridLayoutManager 而不是 LinearLayoutManager 如下:

GridLayoutManager manager = new GridLayoutManager(this, 3);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return (3 - position % 3);
}
});
recyclerView.setLayoutManager(manager);

在这里,我必须解释几件事。见下图-

enter image description here

  1. 在上面的代码中,跨度大小为 3。这意味着您希望在任何行中的最大列数为 3。

  2. 在上面的代码中,方法getSpanSize 返回位置 的跨度大小。

以上代码的跨度大小:

  1. 如果position为0,span size为3
  2. 如果position为1,span size为2
  3. 如果position为2,span size为1
  4. 如果position为3,span size为3
  5. 如果position为4,span size为2
  6. 如果位置为 5,跨度大小为 1...等等。

如果您了解这一点,它可能会对您有所帮助。

关于android - 在水平 RecyclerView 中添加垂直列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29626804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com