1. 程式人生 > >recyclerview 通用gridlayoutmanger itemdecoration 間距。。可以含頭部

recyclerview 通用gridlayoutmanger itemdecoration 間距。。可以含頭部

recyclerview使用的時候,大多數時候會用到複雜佈局,一個頁面從上到下,有多種佈局,spancount不為1,這個時候,用兩種recyclerview又很麻煩,所以需要這個itemdecoration來設定間距。。。

先來看一個例項佈局。。。


整個佈局除了底部導航欄和上部的toolbar,都是一個recyclerview中,banner 和 中間那塊導航欄也是recyclerview的一部分分別是不同的viewtype。。。

很明顯,banner和中間那塊導航欄並不需要設定間距,而下面的方塊的教練資訊item需要設定間距,那麼怎麼辦,又要放在一個recyclerview中,只能在設定間距的時候,把除了方塊的其他viewtype的間距不設定。。。

看程式碼

public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {

    private int spanCount;
    private int spacing;
    private boolean includeEdge;
    private int headerNum;

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

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        int position = parent.getChildAdapterPosition(view) - headerNum; // item position

        if (position >= 0) {
            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
                }
            }
        } else {
            outRect.left = 0;
            outRect.right = 0;
            outRect.top = 0;
            outRect.bottom = 0;
        }
    }
}


頭部不設定的有幾個部分,就把headernum設定為幾

相關推薦

recyclerview 通用gridlayoutmanger itemdecoration 間距可以頭部

recyclerview使用的時候,大多數時候會用到複雜佈局,一個頁面從上到下,有多種佈局,spancount不為1,這個時候,用兩種recyclerview又很麻煩,所以需要這個itemdecoration來設定間距。。。 先來看一個例項佈局。。。 整個佈局除了底

Filter過濾器(自動登陸、通用的字符集編碼的過濾【處理不同請求的亂碼問題】、

XML under amt 有關 filter過濾器 pre 繼承 擴展名 獲取 Filter過濾器:可以過濾(攔截)從客戶端向服務器發送的請求。 過濾器的作用:   進行ip的過濾,臟話敏感詞語的過濾,自動登陸,響應壓縮。。。 過濾器的使用:   1.編寫類實現Filte

Springboot結合mybatis和mybatis generator的外掛,利用tk.mybatis的通用mapper實現逆向工程

SpringBoot結合Mybatis的generator外掛以及tk.mybatis的通用mapper實現逆向工程的生成 1.首先在資料庫中建好表。 2.然後在pom中增加mybatis和通用mapper的依賴,以及generator的外掛。 3.需要自己在u

AppBarLayout+TabLayout+RecyclerView實現滑動隱藏導航欄

先看效果圖。 其實現思路是這樣的,整體佈局用CoordinatorLayout,然後裡面加入AppBarLayout,這個bar容器裡面放入toolbar和TabBar,下面再加入一viewpager,類裡面讓它與TabLayout聯動,RecycleView則放在vie

RecyclerView 替換 Scrollview,gridview 組合

至於為何要這麼做,無需多言,相信大家深有體會。 先上主佈局檔案以及item佈局檔案, <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://sch

解決6.0以上ScrollView巢狀RecyclerView能同時滑動的問題

在4.X的版本中ScrollView巢狀RecyclerView只需要重寫LinearLayoutManager即可,同時還解決了顯示不全的問題,具體實現如下: import java.lang.reflect.Field; import android.content.

A - Superset CodeForces - 97B(人生第一個分治法,感覺,像二分啊

但是 ++ 是什麽 force else super 結構體 運算 代碼 /* 分治法,第一次做不是很懂,借鑒了神犇代碼,但實操之後感覺像二分,,可能做得少了或者就是。。。。 */ 題目大意: 一個集合裏有若幹點,要求你添加某些點後保證這個集合裏的任意兩點滿足以下三個條件中

快速冪算法(矩陣快速冪還不是很會日後會更新)

代碼 -s get 運算 logs == data 。。 outb PS:轉載,自己寫的不如人家,怕誤導。轉載地址:http://www.cnblogs.com/CXCXCXC/p/4641812.html 首先,快速冪的目的就是做到快速求冪,假設我們要求a^b,按照樸素算

天天盼著,卻度日如年年

http://buluo.qq.com/p/detail.html?bid=370910&pid=5181886-1493062178&from=buluoadmin http://buluo.qq.com/p/detail.html?bid=370910&pid=5748008-1

火柴排隊(NOIP2013)(附樹狀數組專題講解(其實只是粗略))

blog 規律 混亂 ace urn ets gets value update 原題傳送門。。(9018上不去。明天再來搞。) 首先,這道題目是一道神奇的題。 看到這道題,第一眼就覺得2個數組排個序,然後一一對應的時候一定差值最小。 由於我們可以將這2個數列同時進行調換。

HDU 4920(杭電多校訓練#5 1010 題) Matrix multiplication(不知道該掛個什麽帽子

預處理 ica ref 循環 ring sca esp 題解 code 題目地址:HDU 4920 對這個題簡直無語到極點。。。竟然O(n^3)的復雜度能過。。。。方法有三。。 1:進行輸入優化和輸出優化。。(前提是你的輸入優化不能太搓。。。) 2:利用緩存優化。。詳情

尋找道路(NOIP2014)神奇之題

printf als 是否 h+ 根據 ack ble false 我們 原題傳送門 這道題嘛。。 首先根據題目,我們要先知道哪些點能夠到達終點。(反向BFS) 然後我們再求最短路的途中,必須隨時判斷周圍的點是否被第一次BFS標記過。、 所以再來一次BFS。 數組記得清零,

empty type() exist eth literal creat tin iter lob public class DylanLineMarkerProvider implements LineMarkerProvider { protected fina

amp inf ber class har count display spl urn #include<cstdio> #include<cstring> #include<queue> #include<algorith

我要抓狂了又回到了幾天不能A一道題的時候

sdn 做了 csdn ati .net xheditor dsm gif 微笑 poj1556我不做了。你做做把...我已經要game over了 我要抓狂了。。又回到了幾天不能A一道題的時候

python+unittest框架整理(一點點學習前輩們的封裝思路,一點點成長

spa star 世界 ner bytes odi splay 好玩 etime 預期框架整理目標: 1.單個用例維護在單個.py文件中可單個執行,也可批量生成組件批量執行 2.對定位參數,定位方法,業務功能腳本,用例腳本,用例批量執行腳本,常用常量進行分層獨立,各自維護在

文件編譯不通過,經常遇到的

sin uid ldr pan java refresh via per framework    嚴重: Exception sending context initialized event to listener instance of class org.sprin

HTML5+CSS3蒙古人

highlight 學生成績 eight spf title 不顯示 enter 古人 pst 1.html5的基本結構 <!DOCTYPE html> //聲明HTML5結構,表示是否符合W3C的標準 <html>

無聊的我寫了一個代碼 P1605 迷宮

技術 open closed char log one void ide type 搜索水題 哎 直接不行了 。 #include <ctype.h> #include <cstdio> void read(int &x)

Windows文件夾加密(宅男專用)

reat 設置密碼 eat create val == 解鎖 pass not 加密windows系統的文件夾內容,加密後的文件夾內容只有輸入密碼後,才能看到。先上代碼: cls@ECHO OFFtitle Folder Privateif EXIST "Locker"