美文网首页Android 复习学习使用
RecyclerView表格和瀑布流布局单独占满一行实现

RecyclerView表格和瀑布流布局单独占满一行实现

作者: 人世看客 | 来源:发表于2022-08-05 17:22 被阅读0次

    一、前言

    在使用RecyclerView多布局的时候,我们经常会遇到这样的界面,上面多个不固定位置的布局,下面是一个固定的2列瀑布流布局列表。有的小伙伴们估计把下面的瀑布流布局,单独用Recyclerview作为item,或者单独拧出来。前者大概率有事件冲突,而且数据也不好处理;后者失去了多布局的意义。我们有更简洁的方法,整个布局使用瀑布流布局,上面的多个布局,每个实现单独占一行

    二、具体实现

    这里介绍RecyclerView两种管理器实现独占一行的实现,表格布局实现(GridLayoutManager)和我们上面说的瀑布流布局(StaggeredGridLayoutManager),主要都是用布局管理器实现

    • 表格布局(GridLayoutManager)
            val gridLayoutManager = GridLayoutManager(this, 3)
            gridLayoutManager.spanSizeLookup = object : SpanSizeLookup() {
                override fun getSpanSize(position: Int): Int {
                    return if (position == position % 3) {
                        3
                    } else {
                        1
                    }
                }
            }
    

    上面是一个3列的表格布局,下标为3的倍数的item独占一行。注意:这里返回的3,意思是这个item占3列,1就是正常的占一列

    • 瀑布流布局(StaggeredGridLayoutManager)
      这里直接可以在adapter中的onViewAttachedToWindow下面实现,上面的表格布局也一样可在这里实现
        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独占一行,主要设置lp.isFullSpan = true

    相关文章

      网友评论

        本文标题:RecyclerView表格和瀑布流布局单独占满一行实现

        本文链接:https://www.haomeiwen.com/subject/deppwrtx.html