我们可以给RecycleView设置不同的布局管理器,例如GridLayoutManager和StaggeredGridLayoutManager。以此来实现不同的列表排列效果。其中StaggeredGridLayoutManager即是我们常说的瀑布流式布局效果。
使用GridLayoutManager比较多的同学会发现,它可以通过设置setSpanSizeLookup()动态的控制Item每一行占据的列数,实现多样的布局效果,但是StaggeredGridLayoutManager并没有,即使它名字是那么的相似。
那如何在实现瀑布流式布局时,动态是设置使其占据一整行呢?
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val lp = holder.itemView.layoutParams
if (getItemViewType(position) == VIEW_TYPE_FIRST_ITEM) {//判断是否需要占据整行
if (lp is StaggeredGridLayoutManager.LayoutParams) {
lp.isFullSpan = true
}
} else {
if (lp is StaggeredGridLayoutManager.LayoutParams) {
lp.isFullSpan = false
}
}
}
其设置生效的关键就是函数StaggeredGridLayoutManager.LayoutParams.setFullSpan(true)的调用。
网友评论