Android RecyclerView —— 自定义分割线

本文介绍了如何在Android中为RecyclerView自定义分割线,通过实现ItemDecoration接口来创建分割线,解决了因分割线导致的item宽度不一致的问题,并提供了不同类型的分割线实现,包括GridLayoutManager的案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android RecyclerView —— 自定义分割线

Android RecyclerView —— 基本使用

Android RecyclerView —— 适配器封装探索

前面说了 RecyclerView 的基本使用以及对适配器的封装,但是在使用 ListView 时,有 dividerHeightdivider 属性用来设置分割线的高度和颜色(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值