RecyclerView 設(shè)置item之間的間距

RecyclerView沒(méi)有可以直接設(shè)置間距的屬性深胳,但看了源碼之后可以發(fā)現(xiàn)RecyclerView有個(gè)內(nèi)部類(lèi)ItemDecoration撑蚌,可以用ItemDecoration來(lái)裝飾一個(gè)item厅须,所以繼承重寫(xiě)ItemDecoration就可以實(shí)現(xiàn)間距了丸逸。我看了以下脖律,網(wǎng)上很多類(lèi)似的介紹牺弹,但是大多都只考慮到LinearLayoutManager這種

這是LinearLayoutManager設(shè)置Item間距的的一個(gè)輔助類(lèi)

public class SpacesItemDecoration extends RecyclerView.ItemDecoration {
    private int space;

    public SpacesItemDecoration(int space) {
        this.space = space;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view,
                               RecyclerView parent, RecyclerView.State state) {
        outRect.left = space;
        outRect.right = space;
        outRect.bottom = space;

        // Add top margin only for the first item to avoid double space between items
        if (parent.getChildPosition(view) == 0)
            outRect.top = space;
    }
}

設(shè)置item間距

int space = 8;
mRecyclerView.addItemDecoration(new SpacesItemDecoration(spacingInPixels));

但是我的項(xiàng)目是網(wǎng)格布局啊喇澡,GridLayoutManager迅栅,上面這種辦法也不行啊,先看看效果晴玖,再講講我的辦法

RecyclerView設(shè)置Item的間距.jpg

我的間距只有10dp读存,看上去不是特別明顯,但是效果是有的呕屎,是吧

這里是GridLayoutManager或者StaggeredGridLayoutManager 設(shè)置Item間距的辦法

/**
 * GridLayoutManager(網(wǎng)格布局)設(shè)置item的間隔
 * 
 * 作者: 周旭 on 2017年7月20日 0020.
 * 郵箱:374952705@qq.com
 * 博客:http://www.reibang.com/u/56db5d78044d
 */

public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {

   private int spanCount; //列數(shù)
   private int spacing; //間隔
   private boolean includeEdge; //是否包含邊緣

    public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
        this.spanCount = spanCount;
        this.spacing = spacing;
        this.includeEdge = includeEdge;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
       
       //這里是關(guān)鍵让簿,需要根據(jù)你有幾列來(lái)判斷
        int position = parent.getChildAdapterPosition(view); // item position
        int column = position % spanCount; // item column

        if (includeEdge) {
            outRect.left = spacing - column * spacing / spanCount; // spacing - column * ((1f / spanCount) * spacing)
            outRect.right = (column + 1) * spacing / spanCount; // (column + 1) * ((1f / spanCount) * spacing)

            if (position < spanCount) { // top edge
                outRect.top = spacing;
            }
            outRect.bottom = spacing; // item bottom
        } else {
            outRect.left = column * spacing / spanCount; // column * ((1f / spanCount) * spacing)
            outRect.right = spacing - (column + 1) * spacing / spanCount; // spacing - (column + 1) * ((1f /    spanCount) * spacing)
            if (position >= spanCount) {
                outRect.top = spacing; // item top
            }
        }
    }
}

調(diào)用的地方

        int spanCount = 3; // 3 columns
        int spacing = 50; // 50px
        boolean includeEdge = false;
        mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(spanCount, spacing, includeEdge));

如果你了別人的RecycleView 上拉加載下拉刷新,addItemDecoration 這個(gè)方法 不一定會(huì)給你加上秀睛,你可以在源碼上自行添加尔当。

public void addItemDecoration(RecyclerView.ItemDecoration decor) {
    mRecyclerView.addItemDecoration(decor,-1);
}

其實(shí)還有一種比較巧妙的辦法,就是在item的布局里面搞事情


舉個(gè)例子.jpg
111.png

圖畫(huà)的有點(diǎn)丑蹂安,用代碼來(lái)說(shuō)話(huà)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="185dp"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@color/transparent"
    android:padding="10dp">

    <RelativeLayout
        android:layout_width="165dp"
        android:layout_height="280dp"
        android:background="@color/white"
        android:orientation="vertical">
  </RelativeLayout>
</LinearLayout>

里面這個(gè)RelativeLayout就是你的item正常的布局椭迎,而LinearLayout 這個(gè)根部局我設(shè)置了他的背景色為透明的,再加一個(gè)padding就行了田盈,這個(gè)padding就是設(shè)置item的間距畜号,這樣設(shè)置item的間距了。

所以說(shuō)RecyclerView的Item的間距都可以通過(guò)item里面設(shè)置padding允瞧,margin來(lái)解決简软,這種辦法相對(duì)巧妙。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末述暂,一起剝皮案震驚了整個(gè)濱河市痹升,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌畦韭,老刑警劉巖视卢,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異廊驼,居然都是意外死亡据过,警方通過(guò)查閱死者的電腦和手機(jī)惋砂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绳锅,“玉大人西饵,你說(shuō)我怎么就攤上這事×圮剑” “怎么了眷柔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)原朝。 經(jīng)常有香客問(wèn)我驯嘱,道長(zhǎng),這世上最難降的妖魔是什么喳坠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任鞠评,我火速辦了婚禮,結(jié)果婚禮上壕鹉,老公的妹妹穿的比我還像新娘剃幌。我一直安慰自己,他們只是感情好晾浴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布负乡。 她就那樣靜靜地躺著,像睡著了一般脊凰。 火紅的嫁衣襯著肌膚如雪抖棘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天狸涌,我揣著相機(jī)與錄音切省,去河邊找鬼。 笑死杈抢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仑性。 我是一名探鬼主播惶楼,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诊杆!你這毒婦竟也來(lái)了歼捐?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晨汹,失蹤者是張志新(化名)和其女友劉穎豹储,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體淘这,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剥扣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年巩剖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钠怯。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佳魔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晦炊,到底是詐尸還是另有隱情鞠鲜,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布断国,位于F島的核電站贤姆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏稳衬。R本人自食惡果不足惜霞捡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宋彼。 院中可真熱鬧弄砍,春花似錦、人聲如沸输涕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)莱坎。三九已至衣式,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間檐什,已是汗流浹背碴卧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乃正,地道東北人住册。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像瓮具,于是被迫代替她去往敵國(guó)和親荧飞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容