我在项目中创建了RecyclerView
水平。我希望水平行具有不同的大小和多个垂直列,每个行包含不同数量的行,如下图所示:
水平行数是可变的。第一列可以有四行,第二列可以有三行,四列......列数也是可变的。
结果就像一个电视指南,列是频道和行排放。这不是电视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);
}
结果如下图所示:
但是我无法在垂直列中显示某些项目。怎么做?感谢
答案 0 :(得分:5)
here在Variable span size
RecyclerView
回答了问题
使用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);
在这里,我必须解释一些事情。见下图 -
在上面的代码中,跨度大小为3.这意味着任何行中所需的最大列数为3.
在上面的代码中,方法getSpanSize
返回position
的跨度大小。
以上代码的跨度大小:
如果您理解这一点,它可能会对您有所帮助。