Android RecyclerView-ItemDecorator-不切断项目的间距

Android RecyclerView-ItemDecorator-不切断项目的间距,android,android-recyclerview,gridlayoutmanager,Android,Android Recyclerview,Gridlayoutmanager,我使用以下分隔符进行垂直线性布局,效果非常好: public class VerticalSpaceItemDecoration extends RecyclerView.ItemDecoration { private final int mVerticalSpaceHeight; public VerticalSpaceItemDecoration(int mVerticalSpaceHeight) { this.mVerticalSpaceHeight

我使用以下分隔符进行垂直线性布局,效果非常好:

public class VerticalSpaceItemDecoration extends RecyclerView.ItemDecoration {

    private final int mVerticalSpaceHeight;

    public VerticalSpaceItemDecoration(int mVerticalSpaceHeight) {
        this.mVerticalSpaceHeight = mVerticalSpaceHeight;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        if (parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1)
            outRect.bottom = mVerticalSpaceHeight;
    }
}
基于此,我尝试为
GridLayout
编写相同的decorator,但问题是,它切断了我的项目。如下所示:

public class GridSpaceItemDecoration extends RecyclerView.ItemDecoration {

    private final int mSpaceSize;
    private final int mCols;

    public GridSpaceItemDecoration(int spaceSize, int cols) {
        this.mSpaceSize = spaceSize;
        mCols = cols;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

        int rows = (int)Math.floor(parent.getAdapter().getItemCount() / mCols) + 1;
        int pos = parent.getChildAdapterPosition(view);
        int col = pos % mCols;
        int row = (int)Math.floor(pos / mCols);

        final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) view.getLayoutParams();

        if (col < mCols - 1)
            outRect.right = /*params.rightMargin + view.getPaddingRight() +*/ mSpaceSize;
        if (row < rows - 1)
            outRect.bottom = /*params.leftMargin + view.getPaddingLeft() +*/ mSpaceSize;
    }
}
公共类GridSpaceItemDecoration扩展了RecyclerView.ItemDecoration{
私有最终int mSpaceSize;
私人最终国际货币基金组织;
公共网格空间项装饰(int spaceSize,int cols){
this.mSpaceSize=spaceSize;
mCols=cols;
}
@凌驾
public void getItemOffsets(Rect outRect、View View、RecyclerView父级、RecyclerView.State){
int rows=(int)Math.floor(parent.getAdapter().getItemCount()/mCols)+1;
int pos=parent.getChildAdapterPosition(视图);
int col=位置%mCols;
整数行=(整数)数学层(pos/mCols);
final RecycleView.LayoutParams params=(RecycleView.LayoutParams)视图。getLayoutParams();
if(col
两个
装饰器的结果如下(添加了用于调试的颜色):

该图显示,在
GridLayout
中,项目被切断(在项目下方的文本处很容易看到)。我应该提到的是,这两个适配器是相同的,我只是使用另一个
LayoutManager
。项目是一个固定的大小,这是我需要的东西

RecyclerView
上调用
setClipChildren(false)
,它应该修复您看到的由装饰程序创建的间距引起的剪辑。

RecyclerView
上调用
setClipChildren(false)
,它应该修复您看到的由装饰器创建的间距引起的剪裁