Android開源:一個通用的RecyclerView的分割線
前言
寫文章前我特地又去網上查了半天RecyclerView分割線的解決方案,大致分這么兩種:
第一種:在item的布局里劃一條線
第二種:自定義ItemDecoration
第一種方案,在LinearLayoutManager中可能沒啥問題,但是到了GridViewLayoutManager你還想用嗎?你確定不是在逗我?
第二種方案,網上幾乎所有的例子都沒有很好的通用性,要么只通用LinearLayoutManager,要么只通用GridViewLayoutManager,而且還沒啥靈活性,比如我想某些LinearLayoutManager的最后一條item不顯示分割線,默寫顯示,怎么辦?這些都沒解決好。
于是我想,作為一個夢想成為海賊王的男人,我必須站出來,將我私藏很久的大寶劍拿出來,分享給大家。
RecyclerView分割線的難點
無外乎兩點:
- 在哪里顯示(哪個Item?Item的上下左右哪里?)
- 顯示什么 (寬多少?虛線實線?啥顏色?純色?漸變色?)
其中最難最核心的,在哪里顯示的問題,本項目已完美解決;
關于第二點,顯示什么的問題,鑒于大部分分割線基本都是純色的,很少有那種花里胡哨的設計,所以該項目暫時樣式只支持自定義寬度和顏色,但這樣相信已經滿足你的要求了吧,不過很快更多可自定義的樣式將放出,歡迎Star、Fork或PR。
Y_DividerItemDecoration項目地址
簡單介紹
一個通用的RecyclerView的分割線,支持LinearLayoutManager和GridViewLayoutManager。只要你能描述清楚每個position上下左右分割線的情況,原則上支持任意LayoutManager
LinearLayoutManager
普通GridViewLayoutManager
異形GridViewLayoutManager
Features
- LinearLayoutManager和GridViewLayoutManager通用
- 自定義分割線的寬度和顏色
- 靈活控制RecyclerView每個條目left、top、right、bottom的分割線的顯示與否
Usage
Step1
新建一個對象實現抽象類 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;
}
}</code></pre>
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
項目主頁:http://www.baiduhome.net/lib/view/home/1491963910495