recyclerView 的 item 默认是带有列间距的,但是上下是没有间距的,上下2个Item是紧挨着的,这样看起来比较难看,接下来解决这个问题
首先MainAtcity代码:
//设置recycler的显示方式为2列
recyclerView.setLayoutManager(new GridLayoutManager(this,2));
//添加Item的间距,第一个参数表示展示的列数,第二个参数表示2个Item之间的间隔
recyclerView.addItemDecoration(new SpaceItemDecoration(2,UiUtils.dip2px(16)));
MyAdapter myAdapter = new MyAdapter();
recyclerView.setAdapter(myAdapter);
SpaceItemDecoration 需要继承自系统的RecyclerView.ItemDecoration,然后通过调节 矩形的left right来改变Item之间的间距
细看请看下面这个方法getItemOffsets()
class SpaceItemDecoration extends RecyclerView.ItemDecoration {
private int space;
private int spanCount; //列数
private int spacing; //间隔
private boolean includeEdge; //是否包含边缘
public SpaceItemDecoration(int spanCount, int space, boolean includeEdge) {
this.spacing = space;
this.spanCount = spanCount;
this.includeEdge = includeEdge;
}
@Override
public void getItemOffsets(@NonNull Rect outRect, @View view, @RecyclerView parent, RecyclerView.State state) {
outRect.bottom = spacing;
//获取当前Item的位置
int position = parent.getChildAdapterPosition(view); // item position
//判断奇偶位置,然后进行相应的赋值运算
int column = position % spanCount; // item column
if (column == 0){
outRect.left = spacing;
outRect.right = spacing /spanCount;
}else if (column == 1){
outRect.left = spacing /spanCount;
outRect.right = spacing;
}
}
}