簡介:
? 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就可以達到想要的效果。第三第四個也同理。
? 所以正確的左右設置應該為
? ok,這樣就可以完美的分割每個View了。
? 另外,有時候,我們也會遇到最兩邊也有空白的情況,可以考慮做的簡單一點,直接在recyclerview的屬性里設置左右padding,然后讓所有的item左右留白相等并平分間距,這樣就不用去考慮它是每一排的第幾個了。720px,假設間距為20px,計算得item為155px。
paddingleft 10 | 10 155 10 | 10 155 10 |10 155 10 |10 155 10 | paddingright?10
總結:
? 這樣的設置能很好地解決RecyclerView每個Child View的間距,并且后期修改也非常容易,即使修改邏輯,只要弄清楚每個item居左居右的距離,稍稍改動便能完成。
? 當然,設計情景多種多樣,還需要結合不同的實際要求去適應,這次暫時就講解到這里,感謝。