RecyclerView底部分割线去除的方法
发布时间 - 2026-01-11 00:32:43 点击率:次概述

之前我们抛出了一个问题就是RecyclerView在显示列表的时候,最底部也就是最后一个Item后面还有分割线,这大大影响界面的美观。这篇文章就是解决这个问题的。
自定义分割线
通过分析源码后我们发现没有相关的方法来处理这一需求,所以只能自定义分割线,通过上一篇文章的基础我们知道肯定是修改getItemOffsets。那我们的思路是让这个方法在到最后一个条目时,不偏移分割线的间隙。同时也要修改onDraw方法,让他不再绘制最后一条分割线。
private void drawHorizontal(Canvas c, RecyclerView parent, State state) {
int childCount = parent.getChildCount() - 1;
int left = 0;
int top = parent.getPaddingTop();
int right = 0;
int bottom = parent.getHeight() - parent.getPaddingBottom();
for (int i = 0; i < childCount; i++) {
View view = parent.getChildAt(i);
RecyclerView.LayoutParams params = (LayoutParams) view.getLayoutParams(); //考虑,padding
left = view.getRight();
right = left + divider.getIntrinsicHeight(); //我们在自定义drawable的是是,写死了高度,所以只能用高度
divider.setBounds(left, top, right, bottom);
divider.draw(c);
}
}
/**
* 思路:就是获取每个item,计算divider的left,top,right,bottom
*/
private void drawVertical(Canvas c, RecyclerView parent, State state) {
int childCount = parent.getChildCount() - 1;
int left = parent.getPaddingLeft();
int top = 0;
int right = parent.getWidth() - parent.getPaddingRight(); //考虑右边的padding
int bottom = 0;
for (int i = 0; i < childCount; i++) { //不绘制最后一个条目的分割线
View view = parent.getChildAt(i);
RecyclerView.LayoutParams params = (LayoutParams) view.getLayoutParams(); //考虑,padding
top = view.getBottom() + params.topMargin; //就是当前view底部到顶部的距离
bottom = top + divider.getIntrinsicHeight() - params.bottomMargin; //就是top+divider高度
divider.setBounds(left, top, right, bottom);
divider.draw(c);
}
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {
int childAdapterPosition = parent.getChildAdapterPosition(view);
int lastCount = parent.getAdapter().getItemCount() - 1;
//如果当前条目与是最后一个条目,就不设置divider padding
if (childAdapterPosition == lastCount) {
outRect.set(0, 0, 0, 0);
return;
}
Log.d("TAG", childAdapterPosition + "," + lastCount);
if (orientation == LinearLayoutCompat.HORIZONTAL) {
outRect.set(0, 0, divider.getIntrinsicHeight(), 0); //0,0,30,0,设置宽度
} else {
outRect.set(0, 0, 0, divider.getIntrinsicHeight()); //0,0,0,30,设置高度
}
}
使用这个自定义分割线的效果图如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# RecyclerView去除底部分割线
# RecyclerView消除底部分割线
# RecyclerView自定义分割线
# android中RecyclerView自定义分割线实现
# Android RecyclerView网格布局(支持多种分割线)详解(2)
# 万能RecyclerView分割线
# RecyclerView消除底部分割线的方法
# RecyclerView的万能分割线
# 浅谈Android RecyclerView 间距全适配
# Android RecyclerView使用GridLayoutManager间距设置的方法
# RecyclerView设置间距和添加分割线的方法
# 分割线
# 自定义
# 的是
# 这一
# 让他
# 也要
# 就不
# 死了
# 上一
# 一个问题
# 这篇文章
# 只能用
# 方法来
# 抛出
# 使用这个
# 解决这个问题
# 大家多多
# 这大
# view
# lt
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
利用JavaScript实现拖拽改变元素大小
简单实现Android文件上传
如何用AWS免费套餐快速搭建高效网站?
JavaScript中的标签模板是什么_它如何扩展字符串功能
如何在万网ECS上快速搭建专属网站?
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
EditPlus中的正则表达式 实战(2)
个人网站制作流程图片大全,个人网站如何注销?
如何在万网自助建站平台快速创建网站?
如何安全更换建站之星模板并保留数据?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
微信小程序 五星评分(包括半颗星评分)实例代码
C语言设计一个闪闪的圣诞树
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
微信小程序 require机制详解及实例代码
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
如何在香港服务器上快速搭建免备案网站?
如何快速搭建高效可靠的建站解决方案?
JavaScript如何实现路由_前端路由原理是什么
利用vue写todolist单页应用
中山网站制作网页,中山新生登记系统登记流程?
Android使用GridView实现日历的简单功能
Laravel如何使用Service Container和依赖注入?(代码示例)
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
PythonWeb开发入门教程_Flask快速构建Web应用
如何快速启动建站代理加盟业务?
如何为不同团队 ID 动态生成多个“认领值班”按钮
JS去除重复并统计数量的实现方法
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
如何用已有域名快速搭建网站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何快速查询网址的建站时间与历史轨迹?
Laravel如何使用Sanctum进行API认证?(SPA实战)
php485函数参数是什么意思_php485各参数详细说明【介绍】
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
javascript中闭包概念与用法深入理解
如何确认建站备案号应放置的具体位置?
如何在阿里云完成域名注册与建站?
Laravel如何配置和使用缓存?(Redis代码示例)
独立制作一个网站多少钱,建立网站需要花多少钱?
如何正确下载安装西数主机建站助手?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Firefox Developer Edition开发者版本入口
Laravel如何使用Eloquent进行子查询
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
下一篇:Linux如何清理yum缓存空间
下一篇:Linux如何清理yum缓存空间

