作者:墨尔本晴上残留的余温丶_856 | 来源:互联网 | 2023-08-18 14:45
前言
自上一次发表 《妈妈再也不用担心我的Recyclerview分割线了》 一转眼已经过去两个多月了,中间很多网友提了不少问题和期望。这段时间一直在起早贪黑的赶项目,有时候闲下来偷偷优化了代码但是没提交到github,也没时间写文档。昨天项目第一阶段刚结束我就静下心来将代码重新进行了梳理和改造。写完我就感觉如果上次 1.0 是《妈妈再也不担心》系列的话,那这一次 2.0 称为《地表最强》系列绝不为过。
首先,再次抛出我对分割线最终奥义的理解。
分割线的奥义
无外乎两点:
在哪里显示(哪个Item?Item的上下左右?)
显示什么 (宽多少?啥颜色?padding?...)
1.0 版和 2.0 版最大的区别在于,1.0 对分割线的控制粒度只细分到了每个条目,而 2.0 版是可以单独精确的控制到每一个条目的每一条边的,跟分割线的最终奥义已经很接近了,你说牛逼不牛逼。
先上项目地址...
Y_DividerItemDecoration 项目地址
Y_DividerItemDecoration
接下来我们来详细看一下 2.0 版到底有哪些牛逼的特性...
2.0 Features
LinearLayoutManager和GridViewLayoutManager通用
以每个item的上、下、左、右每条边为控制单位
可以单独控制每边是否显示
可以单独控制每边的颜色
可以单独控制每边的宽度
可以单独控制每边的 startPadding 和 endPadding
来看效果图
图1 LinearLayoutManager
图2 大分割线GridViewLayoutManager
图2 普通GridViewLayoutManager
图3 异型GridViewLayoutManager
已解决的 1.0 时存在的问题
不能设置分割线的padding(如图1)
分割线作为ItemDecoration占用了item的宽度,分割线细的时候不明显,分割线宽的时候可明显看到有无分割线的item宽度明显不一样(解决方案是将中间分割线的宽度分摊到两边的item上,如图2)
Usage
之所以版本号一下提到了 2.0 ,还有一个很重要的原因就是使用的API发生了很大改变,使用了建造者模式(话说现在不使用建造者模式的开源项目还能叫用户友好的开源项目吗?小调侃一下,勿喷 0.0),更科学清晰了,对比起来 1.0 就是乡村野夫。
Step 1
将依赖加入你项目的build.gradle中:
compile 'com.yanyusong.y_divideritemdecoration:y_divideritemdecoration:2.0'
Step 2
新建一个对象实现抽象类 Y_DividerItemDecoration ,在 getDivider(int itemPosition) 中定义在itemPosition时条目的分割线情况,有无、颜色、宽度、startpadding 和 endpadding 。
private class DividerItemDecoration extends Y_DividerItemDecoration {
private DividerItemDecoration(Context context) {
super(context);
}
@Override
public Y_Divider getDivider(int itemPosition) {
Y_Divider divider = null;
switch (itemPosition % 2) {
case 0:
//每一行第一个显示rignt和bottom
divider = new Y_DividerBuilder()
.setRightSideLine(true, 0xff666666, 10, 0, 0)
.setBottomSideLine(true, 0xff666666, 20, 0, 0)
.create();
break;
case 1:
//第二个显示Left和bottom
divider = new Y_DividerBuilder()
.setLeftSideLine(true, 0xff666666, 10, 0, 0)
.setBottomSideLine(true, 0xff666666, 20, 0, 0)
.create();
break;
default:
break;
}
return divider;
}
}
Step 3
给RecyclerView添加刚才实现的ItemDecoration
recyclerView.addItemDecoration(new DividerItemDecoration(this));
赞赏
如果Y_DividerItemDecoration节省了你大量的时间,可否给我买一袋咖啡,让我更加有动力去把它做得更好呢,谢谢!:blush:
支付宝
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们