Android RecyclerView —— 自定义分割线
Android RecyclerView —— 适配器封装探索
前面说了 RecyclerView
的基本使用以及对适配器的封装,但是在使用 ListView
时,有 dividerHeight
和 divider
属性用来设置分割线的高度和颜色(Drawable
),但是在 RecyclerView
中并没有这个属性,而且也没有替代的属性,也就是说,在 RecyclerView
并我们不能直接设置分割线,而需要使用 RecyclerView
提供的方法 addItemDecoration(@NonNull RecyclerView.ItemDecoration decor)
来增加分割线。 RecyclerView.ItemDecoration
需要由我们自己实现。主要需要实现的有三个方法(真正实现的其实只有2个):
// 在 item 绘制之前调用(就是绘制在 item 的底层) [和 onDrawOver() 方法二选一即可]
public void onDraw(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
this.onDraw(c, parent);
}
// 在 item 绘制之后调用(就是绘制在 item 的上层) [和 onDraw() 方法二选一即可]
public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
this.onDrawOver(c, parent);
}
// 设置偏移量
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
this.getItemOffsets(outRect, ((RecyclerView.LayoutParams)view.getLayoutParams()).getViewLayoutPosition(), parent);
}
getItemOffsets()
实际上是在条目之间分配一块矩形区域用来放置我们的分割线,注意一下方法参数Rect outRect,而通过 onDraw()
方法或者 onDrawOver()
方法把颜色(Drawable)画在刚刚申请的间隔矩形中;这样就相当于增加了分割线。
提示:在 support 包的版本是 25或以上时,系统提供了一个默认绘制分割线的实现 DividerItemDecoration
,但是该实现只针对 LinearLayoutManager
。而对于 GridLay