我使用GridLayoutManager
作为回收者视图的布局管理器。
mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
但我想平均分配两列之间的宽度。我怎么能这样做?
答案 0 :(得分:1)
尝试在recyclerView
上添加此内容:
mRecyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view); // item position
int spanCount = 2;
int spacing = 10;//spacing between views in grid
if (position >= 0) {
int column = position % spanCount; // item column
outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)
if (position < spanCount) { // top edge
outRect.top = spacing;
}
outRect.bottom = spacing; // item bottom
} else {
outRect.left = 0;
outRect.right = 0;
outRect.top = 0;
outRect.bottom = 0;
}
}
});
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用自定义ItemDecoration,您可以根据需要拆分空间:
SpacesItemDecoration可以帮助您:
public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpacesItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view,
RecyclerView parent, RecyclerView.State state) {
outRect.bottom = space;
// Add top margin only for the first item to avoid double space between items
if (parent.getChildLayoutPosition(view)%2 == 0) {
outRect.left = space;
outRect.right = space;
} else {
outRect.right = space;
}
}
}
在您的活动或片段中:
int spacingInPixels = getResources().getDimensionPixelSize(R.dimen.spacing);
spacesItemDecoration = new SpacesItemDecoration(spacingInPixels);
recyclerview.addItemDecoration(spacesItemDecoration);
您可以更改outRect.left&amp; outRect.Right根据您的需要
答案 3 :(得分:0)
像您一样设置列数:
mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
...实际上使网格分成相同宽度的列。
这表明问题出在其他地方,可能是 项目布局 。我想有些空格(填充/边距)是项目向右移动的原因。尝试删除这些间距并检查它是否有效。
如果有帮助,您可以随时使用ItemDecoration添加新的间距,但这不是列数不正确的原因。
我认为启用Show Layout Bounds option可能会对您有所帮助。
答案 4 :(得分:0)
我为等间距写了一个 library,它支持垂直/水平、LTR/RTL、LinearLayout/GridLayout 管理器和边缘包含。它基本上是一个文件,因此您可以将该文件复制粘贴到您的代码中。
我尝试支持 StaggeredGridLayout
但此布局返回的跨度索引不可靠。我很高兴听到任何建议。