Android開源:一個通用的RecyclerView的分割線

didu5351 7年前發布 | 24K 次閱讀 Android開發 移動開發 RecyclerView

前言

寫文章前我特地又去網上查了半天RecyclerView分割線的解決方案,大致分這么兩種:

第一種:在item的布局里劃一條線

第二種:自定義ItemDecoration

第一種方案,在LinearLayoutManager中可能沒啥問題,但是到了GridViewLayoutManager你還想用嗎?你確定不是在逗我?

第二種方案,網上幾乎所有的例子都沒有很好的通用性,要么只通用LinearLayoutManager,要么只通用GridViewLayoutManager,而且還沒啥靈活性,比如我想某些LinearLayoutManager的最后一條item不顯示分割線,默寫顯示,怎么辦?這些都沒解決好。

于是我想,作為一個夢想成為海賊王的男人,我必須站出來,將我私藏很久的大寶劍拿出來,分享給大家。

RecyclerView分割線的難點

無外乎兩點:

  • 在哪里顯示(哪個Item?Item的上下左右哪里?)
  • 顯示什么 (寬多少?虛線實線?啥顏色?純色?漸變色?)

其中最難最核心的,在哪里顯示的問題,本項目已完美解決;

關于第二點,顯示什么的問題,鑒于大部分分割線基本都是純色的,很少有那種花里胡哨的設計,所以該項目暫時樣式只支持自定義寬度和顏色,但這樣相信已經滿足你的要求了吧,不過很快更多可自定義的樣式將放出,歡迎Star、Fork或PR。

Y_DividerItemDecoration項目地址

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

 

 本文由用戶 didu5351 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!