GridLayoutManager动态显示多少列-item中间有空格

GridLayoutManager动态显示多少列-item中间有空格

ShapeRecyclerViewFragment类
package com.example.androidkotlindemo2.recyclerview.demo14

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.GridLayoutManager
import com.example.androidkotlindemo2.R
import com.example.androidkotlindemo2.databinding.ShapeRoundCornerMain2Binding


/**
 * Author : wn
 * Email : maoning20080809@163.com
 * Date : 2024/10/19 11:24
 * Description : 列表圆角
 */
class ShapeRecyclerViewFragment : Fragment(), View.OnClickListener{

    private lateinit var binding: ShapeRoundCornerMain2Binding


    private var drawableIds = arrayListOf<Int>(R.mipmap.demo_classics, R.mipmap.demo_farms, R.mipmap.demo_fishs,
        R.mipmap.demo_fruits, R.mipmap.demo_pets, R.mipmap.demo_kk, R.mipmap.demo_ll, R.mipmap.demo_pets,
        R.mipmap.demo_mm, R.mipmap.demo_nn, R.mipmap.demo_pp, R.mipmap.demo_pp)

    //private var drawableIds = arrayListOf<Int>(R.mipmap.demo_classics, R.mipmap.demo_farms, R.mipmap.demo_fishs, R.mipmap.demo_fruits)


    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        binding = ShapeRoundCornerMain2Binding.inflate(inflater, container, false)
        return binding.root
    }

    var gridLayoutManager : GridLayoutManager? =  null

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        binding.shapeRoundCornerBtn1.setOnClickListener(this)
        binding.shapeRoundCornerBtn2.setOnClickListener(this)
        binding.shapeRoundCornerBtn3.setOnClickListener(this)

        initView2()
    }
    var adapter: ShapeRoundCornerProviderMultiAdapter? = null

    private fun initView2(){
        adapter = ShapeRoundCornerProviderMultiAdapter()
        adapter?.data = getData()
        gridLayoutManager = GridLayoutManager(requireActivity(), SPAN_COUNT)
        initGpanSizeLookup(COLUMN_THREE)
        binding.rvRecyclerView.let {
            it.layoutManager = gridLayoutManager
            it.adapter = adapter
        }
    }

    /**
     * @param column 显示多少列
     */
    private fun initGpanSizeLookup(column : Int){
        gridLayoutManager?.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup(){
            override fun getSpanSize(position: Int): Int {
                var itemViewType = adapter?.getItemViewType(position)
                //第1行标题, 显示1列
                return if(itemViewType == ShapeRoundCornerBean.TYPE_TITLE){
                    SPAN_COUNT
                } else {
                    //动态显示1、2、3列
                    SPAN_COUNT / column
                }
            }
        }
    }


    override fun onClick(v: View?) {
        v?:return
        if(v.id == R.id.shape_round_corner_btn1) {
            initGpanSizeLookup(COLUMN_ONE)
        } else if(v.id == R.id.shape_round_corner_btn2) {
            initGpanSizeLookup(COLUMN_TWO)
        } else if(v.id == R.id.shape_round_corner_btn3) {
            initGpanSizeLookup(COLUMN_THREE)
        }
        adapter?.notifyDataSetChanged()
    }

    private fun getData() : MutableList<ShapeRoundCornerBean>{
        var list = mutableListOf<ShapeRoundCornerBean>()

        for (i in 0 until drawableIds.size){
            var shapeRoundCornerBean = ShapeRoundCornerBean()
            //可以切换,要不要显示标题
            if(i == 0){
                shapeRoundCornerBean.itemViewType = ShapeRoundCornerBean.TYPE_TITLE
                shapeRoundCornerBean.name = "标题${i}"
            } else {
                shapeRoundCornerBean.itemViewType = ShapeRoundCornerBean.TYPE_CONTENT
                shapeRoundCornerBean.name = "name${i}"
            }
            shapeRoundCornerBean.position = i
            shapeRoundCornerBean.desc = "desc${i}"
            shapeRoundCornerBean.imgId = drawableIds[i]
            list.add(shapeRoundCornerBean)
        }
        return list
    }

    companion object {

        //动态计算1、2、3列
        var SPAN_COUNT = 6

        //1列
        var COLUMN_ONE = 1

        //2列
        var COLUMN_TWO = 2

        //3列
        var COLUMN_THREE = 3
    }



}
ShapeRoundCornerProviderMultiAdapter类
package com.example.androidkotlindemo2.recyclerview.demo14

import com.chad.library.adapter.base.BaseProviderMultiAdapter

/**
 * Author : wn
 * Email : maoning20080809@163.com
 * Date : 2024/10/19 13:09
 * Description :
 */
class ShapeRoundCornerProviderMultiAdapter : BaseProviderMultiAdapter<ShapeRoundCornerBean>() {

    init {
        addItemProvider(ShapeContentProvider())
        addItemProvider(ShapeTitleProvider())
    }

    override fun getItemViewType(position: Int): Int {
        return super.getItemViewType(position)
    }

    override fun getItemType(data: List<ShapeRoundCornerBean>, position: Int): Int {

        return data[position].itemViewType
    }
}
ShapeContentProvider类
package com.example.androidkotlindemo2.recyclerview.demo14

import com.chad.library.adapter.base.provider.BaseItemProvider
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.example.androidkotlindemo2.R
import com.example.androidkotlindemo2.utils.LogUtils

/**
 * Author : wn
 * Email : maoning20080809@163.com
 * Date : 2024/10/19 13:04
 * Description :
 */
class ShapeContentProvider : BaseItemProvider<ShapeRoundCornerBean>() {

    override val itemViewType: Int
        get() = ShapeRoundCornerBean.TYPE_CONTENT

    override val layoutId: Int
        get() = R.layout.shape_round_corner_item2

    override fun convert(helper: BaseViewHolder, item: ShapeRoundCornerBean) {
        LogUtils.i("BBB","ContentProvider 数据:${item.name}, ${item.imgId}")
        helper.setText(R.id.shape_round_corner_item_name, item.name)
        helper.setText(R.id.shape_round_corner_item_desc, item.desc)
        helper.setImageResource(R.id.shape_round_corner_item_img, item.imgId)
    }

}
ShapeTitleProvider类:
package com.example.androidkotlindemo2.recyclerview.demo14

import com.chad.library.adapter.base.provider.BaseItemProvider
import com.chad.library.adapter.base.viewholder.BaseViewHolder
import com.example.androidkotlindemo2.R
import com.example.androidkotlindemo2.utils.LogUtils

/**
 * Author : wn
 * Email : maoning20080809@163.com
 * Date : 2024/10/19 13:17
 * Description :
 */
class ShapeTitleProvider : BaseItemProvider<ShapeRoundCornerBean>() {

    override val itemViewType: Int
        get() = ShapeRoundCornerBean.TYPE_TITLE

    override val layoutId: Int
        get() = R.layout.shape_round_corner_title

    override fun convert(helper: BaseViewHolder, item: ShapeRoundCornerBean) {
        LogUtils.i("BBB","ShapeTitleProvider 标题:${item.name}, ${item.imgId}")

        helper.setText(R.id.shape_round_corner_title, item.name)
    }
}
ShapeRoundCornerBean类:
package com.example.androidkotlindemo2.recyclerview.demo14

/**
 * Author : wangning
 * Email : maoning20080809@163.com
 * Date : 2023/9/24 10:12
 * Description :
 */
class ShapeRoundCornerBean() {

    var itemViewType = 0

    var position = 0
    var name : String = ""
    var desc : String = ""
    var imgId: Int = 0

    companion object {

        //类型
        val TYPE_TITLE = 1

        //内容
        val TYPE_CONTENT = 2


    }

}
shape_round_corner_main2.xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/gray_e5e5e5"
    android:orientation="vertical">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:textColor="@color/blue"
        android:textSize="20sp"
        android:layout_marginVertical="20dp"
        android:text="Shape圆角-item中间有空格\nGridLayoutManager动态显示多少列"/>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:gravity="center"
        android:orientation="horizontal">
        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/shape_round_corner_btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="28sp"
            android:text="1列"/>

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/shape_round_corner_btn2"
            android:layout_marginHorizontal="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="28sp"
            android:text="2列"/>

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/shape_round_corner_btn3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="28sp"
            android:text="3列"/>

    </LinearLayout>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_recycler_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="10dp"
        android:layout_below="@+id/rv_snap_helper_title" />

</LinearLayout>
shape_round_corner_item2.xml布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/gray_e5e5e5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_marginHorizontal="4dp"
    android:layout_marginVertical="4dp"
    android:padding="10dp"
    android:background="@drawable/shape_round_corner"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/shape_round_corner_item_img"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:scaleType="centerCrop"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:src="@mipmap/demo_farms"/>

    <androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/shape_round_corner_item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        app:layout_constraintStart_toEndOf="@+id/shape_round_corner_item_img"
        app:layout_constraintTop_toTopOf="parent"
        android:textColor="@color/black"
        android:textSize="16sp"
        android:text="item" />

    <androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/shape_round_corner_item_desc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        app:layout_constraintStart_toEndOf="@+id/shape_round_corner_item_img"
        app:layout_constraintTop_toBottomOf="@+id/shape_round_corner_item_name"
        android:textColor="@color/red"
        android:textSize="16sp"
        android:text="desc" />

</androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>
shape_round_corner_title.xml布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_marginHorizontal="10dp"
    android:layout_marginVertical="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/shape_round_corner_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:textColor="@color/red"
        android:textSize="16sp"
        android:text="标题" />

    <androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/shape_round_corner_more"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="10dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:textColor="@color/red"
        android:textSize="16sp"
        android:text="更多" />

</androidx.constraintlayout.widget.ConstraintLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王宁-Android

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值