自定义类继承自RecyclerView.ItemDecoration,并重写getItemOffsets方法,根据自己想要的效果定制规则来实现。
以下实现的效果是以宫格列表为例实现的:第一行时顶部加间距,其他行不加(布局中加了底部间距);item在左边时左间距完整,右间距减一半,item在右边时左间距减半,右间距完整。
public class TextTopicGridSpaceItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public TextTopicGridSpaceItemDecoration(Context mContext, int space){
this.space= DeviceUtils.dp2px(mContext,space);
}
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
if (parent.getChildAdapterPosition(view)==0||parent.getChildAdapterPosition(view)==1){
outRect.top= space;
}else {
outRect.top=0;
}
if (parent.getChildAdapterPosition(view)%2==0){
outRect.left=space;
outRect.right=space/2;
}else {
outRect.left=space/2;
outRect.right=space;
}
}
}