天天看点

RecyclerView使用ItemDecoration设置分割线

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来做是实现不了如上效果的。

RecyclerView使用ItemDecoration设置分割线

注意点:需要注意的是,gridLayoutManager为横向每个Item分配的宽度是一致的,所以要做到每个item的位置正确,必须在第一个item的右侧设置中间间距的二分之一,第二个item设置左侧边距为二分之一,这样才能保证每个item的位置没有偏移。

不能单独只设置一个item的间距,这样会导致位置偏移。