前言
寫文章前我特地又去網(wǎng)上查了半天RecyclerView分割線的解決方案特铝,大致分這么兩種:
第一種:在item的布局里劃一條線
第二種:自定義ItemDecoration
第一種方案蛮瞄,在LinearLayoutManager中可能沒啥問題,但是到了GridViewLayoutManager你還想用嗎晒骇?你確定不是在逗我?
第二種方案磺浙,網(wǎng)上幾乎所有的例子都沒有很好的通用性洪囤,要么只通用LinearLayoutManager,要么只通用GridViewLayoutManager撕氧,而且還沒啥靈活性瘤缩,比如我想某些LinearLayoutManager的最后一條item不顯示分割線,默寫顯示伦泥,怎么辦剥啤?這些都沒解決好锦溪。
于是我想,作為一個夢想成為海賊王的男人府怯,我必須站出來刻诊,將我私藏很久的大寶劍拿出來,分享給大家富腊。
RecyclerView分割線的難點
無外乎兩點:
- 在哪里顯示(哪個Item坏逢?Item的上下左右哪里?)
- 顯示什么 (寬多少赘被?虛線實線是整?啥顏色?純色民假?漸變色浮入?)
其中最難最核心的,在哪里顯示的問題羊异,本項目已完美解決事秀;
關(guān)于第二點,顯示什么的問題野舶,鑒于大部分分割線基本都是純色的易迹,很少有那種花里胡哨的設(shè)計,所以該項目暫時樣式只支持自定義寬度和顏色平道,但這樣相信已經(jīng)滿足你的要求了吧睹欲,不過很快更多可自定義的樣式將放出,歡迎Star一屋、Fork或PR窘疮。
Y_DividerItemDecoration項目地址
簡單介紹
一個通用的RecyclerView的分割線,支持LinearLayoutManager和GridViewLayoutManager冀墨。只要你能描述清楚每個position上下左右分割線的情況闸衫,原則上支持任意LayoutManager
![LinearLayoutManager](http://ofc92njab.bkt.clouddn.com/Screenshot_2017-04-10-14-02-17.png?imageView2/0/w/500/h/1000/format/jpg/q/75%7Cimageslim)
![普通GridViewLayoutManager](http://ofc92njab.bkt.clouddn.com/Screenshot_2017-04-10-14-02-30.png?imageView2/0/w/500/h/1000/format/jpg/q/75%7Cimageslim)
![異形GridViewLayoutManager](http://ofc92njab.bkt.clouddn.com/Screenshot_2017-04-10-14-02-39.png?imageView2/0/w/500/h/1000/format/jpg/q/75%7Cimageslim)
Features
- LinearLayoutManager和GridViewLayoutManager通用
- 自定義分割線的寬度和顏色
- 靈活控制RecyclerView每個條目left、top诽嘉、right蔚出、bottom的分割線的顯示與否
Usage
Step1
新建一個對象實現(xiàn)抽象類 Y_DividerItemDecoration ,在getItemSidesIsHaveOffsets(int itemPosition)中定義在itemPosition時條目的順時針方向left, top, right, bottom是否需要顯示分割線虫腋。
class DividerItemDecoration extends Y_DividerItemDecoration {
public DividerItemDecoration(Context context, int lineWidthDp, @ColorInt int colorRGB) {
super(context, lineWidthDp, colorRGB);
}
@Override
public boolean[] getItemSidesIsHaveOffsets(int itemPosition) {
//順時針順序:left, top, right, bottom
boolean[] isOffset = {false, false, false, true};//默認只有bottom顯示分割線
return isOffset;
}
}
Step2
給RecyclerView添加分割線骄酗,并傳入分割線的width和color,width單位是dp岔乔,color必須是包含Alpha和R酥筝、G、B的16進值的int值雏门,例如:0xff6c6c6c
recyclerView.addItemDecoration(new DividerItemDecoration(this, 6, 0xff6c6c6c));
Download
Gradle
compile 'com.yanyusong.y_divideritemdecoration:y_divideritemdecoration:1.0
交流圈
技術(shù)交流QQ群:627374460
或直接掃碼加群
![QQ群](http://ofc92njab.bkt.clouddn.com/temp_qrcode_share_627374460.png?imageView2/0/w/300/h/800/format/jpg/q/75%7Cimageslim)
贊賞
如果Y_DividerItemDecoration節(jié)省了你大量的時間嘿歌,可否給我買一袋咖啡掸掏,讓我更加有動力去把它做得更好呢,謝謝宙帝!??
![支付寶](http://ofc92njab.bkt.clouddn.com/1491803495015.jpg?imageView2/0/w/300/h/800/format/jpg/q/75%7Cimageslim)