GridLayoutManager设置一个3列列表的间距,左右贴边,中间居中。
由于RecyclerView会将宽自动填充满,因此每个item的右边都会留有空白部分,又由于是3列,所以
位移间距 = (屏幕宽度 - 每个item的宽度 * 3)/ 6
int screenWidth = ScreenUtils.getScreenWidth(mContext); //屏幕宽度
int itemWidth = SizeUtils.dp2px(mContext, 90); //每个item的宽度
mRecyclerView.addItemDecoration(new SpaceItemDecoration((screenWidth - itemWidth* 3)/6));
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
private int space; //位移间距
public SpaceItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
if (parent.getChildAdapterPosition(view) %3 == 0) {
outRect.left = 0; //第一列左边贴边
} else {
if (parent.getChildAdapterPosition(view) %3 == 1) {
outRect.left = space;//第二列移动一个位移间距
} else {
outRect.left = space * 2;//由于第二列已经移动了一个间距,所以第三列要移动两个位移间距就能右边贴边,且item间距相等
}
}
if (parent.getChildAdapterPosition(view) >= 3) {
outRect.top = SizeUtils.dp2px(mContext, 10);
} else {
outRect.top = 0;
}
}
}