在RecyclerVie中存在一个方法,是用以设置每个item之间的间距的:addItemDecoration(); 传的是一个ItemDecoration对象, 而一般我们使用的话可以直接继承ItemDecoration复写相关方法就可以了代码如下:
public class MyItemDecoration extends RecyclerView.ItemDecoration {
private int mFirstSpace; //第一个的
private int mOtherSpace; //其他
public MyItemDecoration(int firstSpace, int otherSpace){
this.mFirstSpace = firstSpace;
this.mOtherSpace = otherSpace;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
if(parent.getChildLayoutPosition(view) == 0){
//当是第一个Item的时候 距离上面多少距离,相当于在Item的根布局加上margin参数
outRect.top = mFirstSpace;
}else{
//其他的(非第一个Item的效果)
outRect.top = mOtherSpace;
}
}
}
使用如下:
mRecyclerView.addItemDecoration(new MyItemDecoration(
MeasureUtils.dip2px(this, 39),
MeasureUtils.dip2px(this, 10)));
其中MeasureUtils是我自己的换算方法,把px转换成dp
效果图如下:
可以非常明显的看到,第一个Item距顶部的距离与之后其他是不一样的