一仑性、前言
在使用RecyclerView多布局的時(shí)候,我們經(jīng)常會(huì)遇到這樣的界面公浪,上面多個(gè)不固定位置的布局秆撮,下面是一個(gè)固定的2列瀑布流布局列表四濒。有的小伙伴們估計(jì)把下面的瀑布流布局,單獨(dú)用Recyclerview作為item职辨,或者單獨(dú)擰出來盗蟆。前者大概率有事件沖突,而且數(shù)據(jù)也不好處理舒裤;后者失去了多布局的意義喳资。我們有更簡(jiǎn)潔的方法,整個(gè)布局使用瀑布流布局腾供,上面的多個(gè)布局仆邓,每個(gè)實(shí)現(xiàn)單獨(dú)占一行
二、具體實(shí)現(xiàn)
這里介紹RecyclerView兩種管理器實(shí)現(xiàn)獨(dú)占一行的實(shí)現(xiàn)伴鳖,表格布局實(shí)現(xiàn)(GridLayoutManager)和我們上面說的瀑布流布局(StaggeredGridLayoutManager)节值,主要都是用布局管理器實(shí)現(xiàn)
- 表格布局(GridLayoutManager)
val gridLayoutManager = GridLayoutManager(this, 3)
gridLayoutManager.spanSizeLookup = object : SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
return if (position == position % 3) {
3
} else {
1
}
}
}
上面是一個(gè)3列的表格布局,下標(biāo)為3的倍數(shù)的item獨(dú)占一行榜聂。注意:這里返回的3搞疗,意思是這個(gè)item占3列,1就是正常的占一列
-
瀑布流布局(StaggeredGridLayoutManager)
這里直接可以在adapter中的onViewAttachedToWindow下面實(shí)現(xiàn)须肆,上面的表格布局也一樣可在這里實(shí)現(xiàn)
override fun onViewAttachedToWindow(holder: ViewHolder) {
super.onViewAttachedToWindow(holder)
val type = holder.itemViewType
if (type == 1 || type == 2 || type == 3){
val lp = holder.itemView.layoutParams
if (lp is StaggeredGridLayoutManager.LayoutParams) {
lp.isFullSpan = true
}
}
}
上面代碼表示多布局類型為1匿乃、2桩皿、3的item獨(dú)占一行,主要設(shè)置lp.isFullSpan = true