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) % == ) {
outRect.left = ;
outRect.right = space/;
outRect.bottom = ;
outRect.top = ;
}else if(parent.getChildLayoutPosition(view) % == ){
outRect.left = space/;
outRect.right = ;
outRect.bottom = ;
outRect.top = ;
}
}
}
通过recyclerView.addItemDecoration(yourDecoration);方法设置分割线
这里实现的分割线效果如下图,左右两侧的边距和中间的边距是不一样的,左右两侧的边距是通过在xml文件中Recyclerview的Padding来实现。中间的间距就是上面的代码实现的.
如果在item的layout中用margin来做是实现不了如上效果的。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX90TQPd3Yq5keFpXT4FEVkZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DNwUjNzgTMwEDOxgDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
注意点:需要注意的是,gridLayoutManager为横向每个Item分配的宽度是一致的,所以要做到每个item的位置正确,必须在第一个item的右侧设置中间间距的二分之一,第二个item设置左侧边距为二分之一,这样才能保证每个item的位置没有偏移。
不能单独只设置一个item的间距,这样会导致位置偏移。