簡介:
? App中祝闻,用到最多的設計就是列表形式的布局占卧,而RecyclerView的出現(xiàn),也完完全全的替代了之前的Listview联喘、GridView华蜒,成為android控件中,用途最為廣泛的widget之一豁遭,今天就來簡單介紹一下叭喜,RecyclerView的一些布局方法。
實戰(zhàn):
? 我們經(jīng)常在設計稿中看到各式各樣的列表蓖谢,最通常的需求捂蕴,就是對各個item進行排列譬涡,這就運用到了對分割線的處理。在RecyclerView中啥辨,有一個public void addItemDecoration(RecyclerView.ItemDecoration decor)的方法涡匀,RecyclerView.ItemDecoration這個類里包含了一個getItemOffsets的方法,我們就是要通過這個方法去對每個item分割溉知,通過設置不同的offset來改變間距陨瘩。以下圖這個相冊的為例:
? 讓我們來簡單地剖析一下布局,假設屏幕是720px级乍,每個間距為20px舌劳,通過計算,每個item的長寬為165px玫荣。
? 這時候甚淡,很多人會考慮這樣去設置
? 我這里是dp轉(zhuǎn)px,720是2x捅厂,所以delta是10px贯卦,通過parent.getChildAdapterPosition(view)來判斷是每一行的第幾個,然后第一個item設置了左0右10恒傻,第二個左10右10脸侥,第三個10右10,第四個左10右0盈厘。嗯,理論上來看好像是這樣的官边,動手試試沸手。結(jié)果發(fā)現(xiàn),這樣的布局并沒有到達上圖設計的效果注簿。這是為什么呢契吉?
? 首先,我們要了解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
總結(jié):
? 這樣的設置能很好地解決RecyclerView每個Child View的間距,并且后期修改也非常容易支子,即使修改邏輯创肥,只要弄清楚每個item居左居右的距離,稍稍改動便能完成值朋。
? 當然叹侄,設計情景多種多樣,還需要結(jié)合不同的實際要求去適應昨登,這次暫時就講解到這里趾代,感謝。