RecycleView 的跨度大小
RecycleView's span size
我正在尝试实现类似于上图的布局
将 RecyclerView 与 GridLayoutManager 结合使用,我尝试根据位置设置 setSpanSizeLookup,但无法模仿上面的设计..
有人可以帮忙吗?
mRecyclerView = (RecyclerView) contentView;
mRecyclerView.setHasFixedSize(false);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 3);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return 3 - (position % 3);
}
});
mRecyclerView.setLayoutManager(gridLayoutManager);
..
我得到了什么
好吧,您希望备用 "rows" 在两个单元格之间平均分配。均分要求列数是偶数,3不是偶数。所以,将其更改为 2.
现在,您希望 getSpanSize()
到 return(按行):
- 位置 0 = 2(即跨越两个单元格)
- 位置 1 和 2 = 1(即每个占据一个单元格)
- 位置 3 = 2
- 位置 4 和 5 = 1
- 等等
(position % 3) > 0 ? 1 : 2
似乎会给你那个。
您可以将以下内容添加到您的onCreate()
:
GridLayoutManager layoutManager=new GridLayoutManager(this,10);
layoutManager.setSpanSizeLookup(new
GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int index = position % 2;
switch(index){
case 0: return 1;
case 1: return 2;
}
}
}
之后将 layoutmanager 设置为 recyclerview
recyclerview.setLayoutManager(layoutManager);
我解决了。这是我的代码,您将获得相同的所需输出
GridLayoutManager mLayoutManager = new GridLayoutManager(this, 2);
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int i = 3 - (position % 3);
switch(i){
case 1:
return 1;
case 2:
return 1;
case 3:
return 2;
default:
return 2; \Optional Since it will not have a default case with the given formula
}
Try this i tried it for you
val spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
if (position == 0) {
return 2
} else if (position == 1 || position == 2)
return 1
else if (position == 3)
return 2
else return 1
}
}
val glm = GridLayoutManager(this, 2)
glm.spanSizeLookup = spanSizeLookup
recycler_view.layoutManager = glm
好的,我找到了解决这个布局的方法
像这样的 GrideLayoutManager。
GrideLayoutManager gridLayoutManager = new GridLayoutManager(context,2 , LinearLayoutManager.VERTICAL ,false) ;
在这里你告诉 android 一行将包含 2 个跨度
然后像这样制作 getSpanSize。
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return position % 3 == 0 ? 2: 1
}
});
即每一个位置除以3占据2个span(一行)
我正在尝试实现类似于上图的布局 将 RecyclerView 与 GridLayoutManager 结合使用,我尝试根据位置设置 setSpanSizeLookup,但无法模仿上面的设计..
有人可以帮忙吗?
mRecyclerView = (RecyclerView) contentView;
mRecyclerView.setHasFixedSize(false);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 3);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return 3 - (position % 3);
}
});
mRecyclerView.setLayoutManager(gridLayoutManager);
..
我得到了什么
好吧,您希望备用 "rows" 在两个单元格之间平均分配。均分要求列数是偶数,3不是偶数。所以,将其更改为 2.
现在,您希望 getSpanSize()
到 return(按行):
- 位置 0 = 2(即跨越两个单元格)
- 位置 1 和 2 = 1(即每个占据一个单元格)
- 位置 3 = 2
- 位置 4 和 5 = 1
- 等等
(position % 3) > 0 ? 1 : 2
似乎会给你那个。
您可以将以下内容添加到您的onCreate()
:
GridLayoutManager layoutManager=new GridLayoutManager(this,10);
layoutManager.setSpanSizeLookup(new
GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int index = position % 2;
switch(index){
case 0: return 1;
case 1: return 2;
}
}
}
之后将 layoutmanager 设置为 recyclerview
recyclerview.setLayoutManager(layoutManager);
我解决了。这是我的代码,您将获得相同的所需输出
GridLayoutManager mLayoutManager = new GridLayoutManager(this, 2);
mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
int i = 3 - (position % 3);
switch(i){
case 1:
return 1;
case 2:
return 1;
case 3:
return 2;
default:
return 2; \Optional Since it will not have a default case with the given formula
}
Try this i tried it for you
val spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
if (position == 0) {
return 2
} else if (position == 1 || position == 2)
return 1
else if (position == 3)
return 2
else return 1
}
}
val glm = GridLayoutManager(this, 2)
glm.spanSizeLookup = spanSizeLookup
recycler_view.layoutManager = glm
好的,我找到了解决这个布局的方法 像这样的 GrideLayoutManager。
GrideLayoutManager gridLayoutManager = new GridLayoutManager(context,2 , LinearLayoutManager.VERTICAL ,false) ;
在这里你告诉 android 一行将包含 2 个跨度 然后像这样制作 getSpanSize。
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return position % 3 == 0 ? 2: 1
}
});
即每一个位置除以3占据2个span(一行)