RecyclerView使用ItemDecoration设置分割线
public class MySpaceItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public MySpaceItemDecoration (int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
// 由于每行都只有3个,所以第一个都是3的倍数,把左边距设为0
if (parent.getChildLayoutPosition(view) % 2 == 0) {
outRect.left = 0;
outRect.right = space/2;
outRect.bottom = 0;
outRect.top = 0;
}else if(parent.getChildLayoutPosition(view) % 2 == 1){
outRect.left = space/2;
outRect.right = 0;
outRect.bottom = 0;
outRect.top = 0;
}
}
}
通过recyclerView.addItemDecoration(yourDecoration);方法设置分割线
这里实现的分割线效果如下图,左右两侧的边距和中间的边距是不一样的,左右两侧的边距是通过在xml文件中Recyclerview的Padding来实现。中间的间距就是上面的代码实现的.
如果在item的layout中用margin来做是实现不了如上效果的。
注意点:需要注意的是,gridLayoutManager为横向每个Item分配的宽度是一致的,所以要做到每个item的位置正确,必须在第一个item的右侧设置中间间距的二分之一,第二个item设置左侧边距为二分之一,这样才能保证每个item的位置没有偏移。
不能单独只设置一个item的间距,这样会导致位置偏移。