关于RecylerView分割线的问题,当布局形式为线性布局LinearLayoutManager的时候, 官方提供了一个定义好的分割线类DividerItemDecoration,但是当布局形式为网格布局GridLayoutManager的时候,官方没有提供其分割线的实现类,需要自己去实现;网上大多网格布局分割线的实现都是只有item中间分割,控件的四周没有分割线,所以这里我实现一个item四周也有分割的网格布局分割线:GridItemDivider
效果图如下:
思路比较简单,判断itemview在recylerview中的四种位置:
1. item是第一个,那么四周都有分割线
2. item是第一行,画上、下、右三边的分割线
3. item是第一列,画左、右、下三边的分割线
4.其他情况,画右、下两边的分割线
重写RecyclerView.ItemDecoration的getItemOffsets,针对四种不同的情况将对应的itemview的缩进
下面的完整代码:
public class GridItemDivider extends RecyclerView.ItemDecoration {
private String TAG = getClass().getSimpleName();
private static final int[] ATTRS = new int[]{android.R.attr.listDivider};
private Drawable divider;
public GridItemDivider(Context context) {
final TypedArray a = context.obtainStyledAttributes(ATTRS);
divider = a.getDrawable(0);
a.recycle();
}
public GridItemDivider(Drawable drawable) {
divider = drawable;
}
public GridItemDivider(int height, int color) {
GradientDrawable shapeDrawable = new GradientDrawable();
shapeDrawable.setColor(color);
shapeDrawable.setShape(GradientDrawable.RECTANGLE);
shapeDrawable.setSize(height, height);
divider = shapeDrawable;