Android(安卓)最强RecyclerView分割线XRecyclerViewDivider重磅来袭!!
目录
- 前言
- 一、分割线绘制原理
- 二、XRecyclerViewDivider的功能
-
- 1.LinearLayoutManager
- 2.GridLayoutManager
- 3.StaggeredGridLayoutManager
- 三、项目引入该库
- 总结
前言
沉浸在Android前端这几年里,接触最多的业务就是RecyclerView列表展示数据了,每次写到需要分割线时都是到网上copy,有时候一些分割线又不能满足需求,只能在布局上做文章。
虽然这样可以实现需求,但是总感觉这样写会写很多重复的代码,这边添加了View,那边又设置padding等,所以这一个月来利用工作空闲时间写了这个XRecyclerViewDivider,希望可以帮助大家吧!
一、分割线绘制原理
我们先看看谷歌提供给我们的分割线DividerItemDecoration,它主要实现了RecyclerView.ItemDecoration中的两个方法:onDraw()和getItemOffsets()。那这两个方法有什么用呢?
网上也有挺多文章分析了RecyclerView分割线绘制的原理,其中这篇文章写得真不错RecyclerView 之 ItemDecoration 讲解及高级特性实践,简单来说,getItemOffsets()方法负责为每个item设置间距,即分割线,而onDraw()负责draw这些间距的样式。
二、XRecyclerViewDivider的功能
回到我们的库,我称之为RecyclerView分割线,必然是对其主要的三个LayoutManager提供支持的,不做特别说明,以下的都可兼容横向LayoutManager。
我们采用建造者模式去设置分割线相关属性:
- LinearLayoutManager的分割线对应XLinearBuilder
- GridLayoutManager的分割线对应XGridBuilder
- StaggeredGridLayoutManager的分割线对应XStaggeredGridBuilder
recyclerView.addItemDecoration("对应的Builer");
1.LinearLayoutManager
- 支持水平竖直方向LayoutManager
- 支持设置第一个item 上边距
- 支持设置最后一个item的分割线
- 支持space大小、分割线padding、分割线是否绘制到RecyclerView的padding
- 支持设置分割线color、drawable
- 支持设置不显示哪些item分割线
- 支持定制某个item的分割线(包括padding、color、drawable、设置边界等)
XLinearBuilder属性表格
属性 | 意义 |
---|---|
mSpacing | 分割线间距,默认1dp;可直接设置dp或dp对应的res |
mShowLastLine | 是否绘制最后一个item的分割线,默认false |
mShowFirstTopLine | 是否绘制第一个item上边或左边分割线,默认false |
mIsIncludeParentLTPadding | 分割线是否绘制RecyclerView的左或上padding部分,默认false |
mIsIncludeParentRBPadding | 分割线是否绘制RecyclerView的右或下padding部分,默认false |
mLeftPadding | mTopPadding | 分割线左边距或上边距 |
mRightPadding | mBottomPadding | 分割线右边距或下边距 |
mColor | 分割线的颜色 |
mDividerDrawable | 分割线的drawable |
mOnNoDividerPosition | position分割线不绘制的回调,返回position的数组,为null不处理 |
mOnItemDivider | 定制某条分割线的回调,返回的是LDecoration,为null不处理 |
LDecoration主要是设置某条分割线的属性,如果设置了setPadding方法,则会把mLeftPadding、mTopPadding、mRightPadding、mBottomPadding设置,设置了mDividerDrawable会覆盖mColor,具体可看源码。
效果图:
| |
基本使用1(图一):
new XLinearBuilder(this) //分割线间距,支持float dp 和DimenRes dp .setSpacing(4f) .setShowFirstTopLine(true) .setShowLastLine(true) .setColor(Color.BLACK) //设置哪几个position不绘制分割线,接受数组new int[]{0,1},返回null表示不处理 .setOnItemNoDivider(() -> null) //定制某一item分割线样式,可改颜色和设置边沿分割线,返回null表示不处理 .setOnItemDividerDecoration(new XLinearBuilder.OnItemDivider() { @Override public LDecoration getItemDividerDecoration(int position) { if (position == 1) { return new LDecoration(LinearActivity.this) .setColor(Color.RED); } return null; } }) ;
基本使用2(图二):
new XLinearBuilder(this) //分割线间距,支持float dp 和DimenRes dp .setSpacing(4f) .setShowFirstTopLine(true) .setShowLastLine(true) .setColor(Color.BLACK) //设置哪几个position不绘制分割线,接受数组new int[]{0,1},返回null表示不处理 .setOnItemNoDivider(() -> null) //定制某一item分割线样式,可改颜色和设置边沿分割线,返回null表示不处理 .setOnItemDividerDecoration(new XLinearBuilder.OnItemDivider() { @Override public LDecoration getItemDividerDecoration(int position) { return new LDecoration(LinearActivity.this) .setAroundEdge(true, null, true, null) .setColor(Color.RED); } });
这里只是简单的介绍了几个属性和展示效果,更多属性的设置和水平方向的设置可自行下载demo去设置不一样的属性。
2.GridLayoutManager
- 支持水平竖直方向GridLayoutManager
- 支持设置是否显示边界
- 可分别设置水平方向和竖直方向的space、color、drawable等
- 支持SpanSizeLookup(不规则的Grid)
- 支持设置横竖交叉处的归属(属于竖向或横向)
XGridBuilder属性表格
属性 | 意义 |
---|---|
mSpacing | 分割线间距,默认0dp;可直接设置dp或dp对应的res |
mVLineSpacing | 竖直线的间距,默认0dp,会覆盖mSpacing |
mHLineSpacing | 水平线的间距,默认0dp,会覆盖mSpacing |
mIsIncludeEdge | 是否绘制边界,默认false |
mVerticalIncludeEdge | 分割线交叉处是否属于竖直线的部分,默认false |
mVLineColor | 竖直分割线颜色 |
mHLineColor | 水平分割线颜色 |
mColor | 分割线的颜色,会被mVLineColor或mHLineColor覆盖 |
mVLineDividerDrawable | 竖直分割线的drawable |
mHLineDividerDrawable | 水平分割线的drawable |
mDividerDrawable | 分割线的drawable,会被mVLineDividerDrawable或mHLineDividerDrawable覆盖 |
效果图:
| |
| |
图三、图四和图五、图六主要是是否包括边界和LayoutManager方向不同,使用Builder构造分割线时不需要考虑LayoutManager的方向,我们只管设置自己想要的属性即可,属性代表的意义参照上表。
基本使用:
new XGridBuilder(this) //分割线间距,支持float dp 和DimenRes dp .setSpacing(2f)//这几个Spacing的优先级可看XGridBuilder说明 .setVLineSpacing(4f) .setHLineSpacing(8f) //这几个color和drawable的优先级可看XGridBuilder说明 .setColor(Color.BLUE) //可设置颜色和drawable,drawable>color// .setColorRes(R.color.white)// .setDrawable(new ColorDrawable(Color.WHITE))// .setDrawableRes(R.drawable.) .setHLineColor(Color.BLACK)// .setHLineDrawable() .setVLineColor(Color.RED)// .setVLineDrawable() //是否包括边界 .setIncludeEdge(true) //竖直和水平分割线交叉处绘制的是竖直分割线颜色(交叉处属于竖直分割线) .setVerticalIncludeEdge(true) ;
3.StaggeredGridLayoutManager
- 支持水平竖直方向StaggeredGridLayoutManager
- 支持设置是否显示边界
- 可设置水平方向和竖直方向的space、不支持color、drawable(基本不用)
- 支持设置FullSpan情况
XStaggeredGridBuilder属性表格
属性 | 意义 |
---|---|
mSpacing | 分割线间距,默认0dp;可直接设置dp或dp对应的res |
mVLineSpacing | 竖直线的间距,默认0dp,会覆盖mSpacing |
mHLineSpacing | 水平线的间距,默认0dp,会覆盖mSpacing |
mIsIncludeEdge | 是否绘制边界,默认false |
mIsIgnoreFullSpan | 边界绘制是否忽略FullSpan的情况,默认false |
效果图:
| |
基本使用:
new XStaggeredGridBuilder(this) //分割线间距,支持float dp 和DimenRes dp .setSpacing(2f)//这几个Spacing的优先级可看XGridBuilder说明 .setVLineSpacing(4f) .setHLineSpacing(8f) //是否包括边界 .setIncludeEdge(true) //是否忽略FullSpan的情况 .setIgnoreFullSpan(true) ;
相比上面两个LayoutManager,瀑布流布局分割线就显得很简单了,基本没有color、drawable的定制需求,所以就没有实现,其实它和网格布局差不多,如果有这些需求可参考下网格分割线color、drawable的设置。
感谢:ByRecyclerView,采纳了其对FullSpan处理的一些思想。
三、项目引入该库
在你的 Project build.gradle文件中添加:
allprojects { repositories { ...maven { url 'https://jitpack.io' }}}
在你的 Module build.gradle文件中添加:
dependencies { implementation 'com.github.HHotHeart:XRecyclerViewDivider:1.0.0'}
总结
XRecyclerViewDivider分割线的基本介绍就到这了,使用中有问题或没有实现的功能都可以反馈给我,我一定会尽量满足大家的需求。希望这个库能够帮到大家,附上GitHub传送门,欢迎star~。
更多相关文章
- Unity与Android权限设置
- 教你如何开关Android的APN网络
- Android精讲--界面编程3
- Android(安卓)Permission大全
- Eclipse build Android时不生成apk问题解决方法
- Android(安卓)Develop Tips
- Android混合开发
- Android(安卓)Permission大全
- 【Android布局】在程序中设置android:gravity 和 android:layout