1. 程式人生 > >Android Recyclerview間距 均分 完美佈局 支援兩端間距

Android Recyclerview間距 均分 完美佈局 支援兩端間距

最近專案中要在RecyclerView的Grid中均分間距,看了原始碼和一些文章,下面的這篇很有啟發,在此引用一下,並且在他的基礎上支援任意列數和兩端間距。最後附上程式碼:

簡介:

  App中,用到最多的設計就是列表形式的佈局,而RecyclerView的出現,也完完全全的替代了之前的Listview、GridView,成為android控制元件中,用途最為廣泛的widget之一,今天就來簡單介紹一下,RecyclerView的一些佈局方法。

實戰:

  我們經常在設計稿中看到各式各樣的列表,最通常的需求,就是對各個item進行排列,這就運用到了對分割線的處理。在RecyclerView中,有一個public void addItemDecoration(RecyclerView.ItemDecoration decor)

的方法,RecyclerView.ItemDecoration這個類裡包含了一個getItemOffsets的方法,我們就是要通過這個方法去對每個item分割,通過設定不同的offset來改變間距。以下圖這個相簿的為例:

  讓我們來簡單地剖析一下佈局,假設螢幕是720px,每個間距為20px,通過計算,每個item的長寬為165px。

  這時候,很多人會考慮這樣去設定

  我這裡是dp轉px,720是2x,所以delta是10px,通過parent.getChildAdapterPosition(view)來判斷是每一行的第幾個,然後第一個item設定了左0右10,第二個左10右10,第三個10右10,第四個左10右0。嗯,理論上來看好像是這樣的,動手試試。結果發現,這樣的佈局並沒有到達上圖設計的效果。這是為什麼呢?

  首先,我們要了解RecyclerView的分割原理,當一個RecyclerView設定了一個GridLayoutManager(this,count),並且count為4的時候,實際上就是將螢幕均分為四份,每一份都是180px寬(以720px為例,我們只考慮左右,暫不考慮上下,原理是相同的),如果不設定ItemDecoration,那麼預設item由左開始佈置,也就是說,165px的View在它的佈局中是這樣嬸兒的。

  顯而易見,無論我如何設定,item距邊界最多就15px(left+right),如果要保證第一個item和第二個item間距為20px,那麼我只需要將第二個item設定一個left為5px就可以達到想要的效果。第三第四個也同理。

  所以正確的左右設定應該為

在此基礎上進行改進,支援任意列數和兩端間距: