Отступы в RecyclerView

Проблема с вертикальным отступом между строками в RecyclerView. Пол дня пытаюсь побороть эту проблему. Если делать один столбец - все норм, но с каждым добавленным столбцом увеличивается отступ между строками. Прошу помощи коллеги. Я недавно начал изучать kotlin.

`<?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_width="match_parent"
    android:layout_height="match_parent">

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline18"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="64dp"
        app:layout_constraintGuide_percent="0.08" />

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintLayout"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="16dp"
        app:layout_constraintBottom_toTopOf="@+id/guideline19"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline18">

        <androidx.cardview.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">

            <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <androidx.cardview.widget.CardView
                    android:id="@+id/cardView"
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="16dp"
                    android:layout_marginEnd="16dp"
                    android:layout_marginBottom="8dp"
                    app:layout_constraintBottom_toTopOf="@id/guideline8"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent">

                    <androidx.constraintlayout.widget.ConstraintLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">

                        <androidx.constraintlayout.widget.Guideline
                            android:id="@+id/guideline16"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:orientation="vertical"
                            app:layout_constraintGuide_percent="0.25" />

                        <TextView
                            android:id="@+id/textView"
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_marginStart="16dp"
                            android:layout_marginTop="8dp"
                            android:layout_marginEnd="8dp"
                            android:text="Стандартная аватарка"
                            android:textStyle="bold"
                            app:layout_constraintEnd_toEndOf="parent"
                            app:layout_constraintStart_toStartOf="@+id/guideline16"
                            app:layout_constraintTop_toTopOf="parent" />

                        <ImageView
                            android:id="@+id/imageView2"
                            android:layout_width="0dp"
                            android:layout_height="0dp"
                            android:layout_marginStart="4dp"
                            android:layout_marginTop="4dp"
                            android:layout_marginEnd="4dp"
                            android:layout_marginBottom="4dp"
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintEnd_toStartOf="@id/guideline16"
                            app:layout_constraintStart_toStartOf="parent"
                            app:layout_constraintTop_toTopOf="parent"
                            app:srcCompat="@drawable/avatar_1" />

                        <TextView
                            android:id="@+id/textView2"
                            android:layout_width="0dp"
                            android:layout_height="0dp"
                            android:layout_marginStart="16dp"
                            android:layout_marginTop="8dp"
                            android:layout_marginEnd="8dp"
                            android:layout_marginBottom="8dp"
                            android:text="Данная аватарка выдается при установке игры"
                            android:textSize="12sp"
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintEnd_toEndOf="parent"
                            app:layout_constraintStart_toStartOf="@+id/guideline16"
                            app:layout_constraintTop_toBottomOf="@+id/textView" />
                    </androidx.constraintlayout.widget.ConstraintLayout>

                </androidx.cardview.widget.CardView>

                <androidx.constraintlayout.widget.Guideline
                    android:id="@+id/guideline8"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    app:layout_constraintGuide_percent="0.2" />

                <androidx.cardview.widget.CardView
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="8dp"
                    android:layout_marginEnd="16dp"
                    android:layout_marginBottom="8dp"
                    app:layout_constraintBottom_toTopOf="@id/guideline14"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="@id/guideline8">

                    <FrameLayout
                        android:id="@+id/frameLayout"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginStart="4dp"
                        android:layout_marginTop="4dp"
                        android:layout_marginEnd="4dp"
                        android:layout_marginBottom="8dp">

                        <androidx.recyclerview.widget.RecyclerView
                            android:id="@+id/avatarRecyclerView"
                            android:layout_width="match_parent"
                            android:layout_height="match_parent"


                            android:layout_margin="5dp" />
                    </FrameLayout>
                </androidx.cardview.widget.CardView>

                <androidx.constraintlayout.widget.Guideline
                    android:id="@+id/guideline14"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    app:layout_constraintGuide_percent="0.8" />

                <androidx.cardview.widget.CardView
                    android:layout_width="0dp"
                    android:layout_height="0dp"
                    android:layout_marginStart="16dp"
                    android:layout_marginTop="8dp"
                    android:layout_marginEnd="16dp"
                    android:layout_marginBottom="16dp"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="@id/guideline14">

                    <androidx.constraintlayout.widget.ConstraintLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">

                        <ImageView
                            android:id="@+id/imageView3"
                            android:layout_width="0dp"
                            android:layout_height="0dp"
                            android:layout_marginStart="4dp"
                            android:layout_marginTop="4dp"
                            android:layout_marginEnd="4dp"
                            android:layout_marginBottom="4dp"
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintEnd_toEndOf="@id/guideline17"
                            app:layout_constraintStart_toStartOf="parent"
                            app:layout_constraintTop_toTopOf="parent"
                            app:srcCompat="@android:drawable/ic_dialog_info" />

                        <androidx.constraintlayout.widget.Guideline
                            android:id="@+id/guideline17"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:orientation="vertical"
                            app:layout_constraintGuide_percent="0.25" />

                        <TextView
                            android:id="@+id/textView4"
                            android:layout_width="0dp"
                            android:layout_height="0dp"
                            android:layout_marginStart="16dp"
                            android:layout_marginTop="8dp"
                            android:layout_marginEnd="16dp"
                            android:layout_marginBottom="8dp"
                            android:text="@string/avatar_info"
                            app:layout_constraintBottom_toBottomOf="parent"
                            app:layout_constraintEnd_toEndOf="parent"
                            app:layout_constraintStart_toStartOf="@+id/guideline17"
                            app:layout_constraintTop_toTopOf="parent" />

                    </androidx.constraintlayout.widget.ConstraintLayout>
                </androidx.cardview.widget.CardView>
            </androidx.constraintlayout.widget.ConstraintLayout>
        </androidx.cardview.widget.CardView>

    </androidx.constraintlayout.widget.ConstraintLayout>

    <TextView
        android:id="@+id/textView5"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:gravity="center"
        android:text="@string/avatar_logo"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toTopOf="@+id/guideline18"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />

    <ImageButton
        android:id="@+id/imageButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toTopOf="@+id/guideline18"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@android:drawable/btn_dialog" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline19"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_begin="676dp"
        app:layout_constraintGuide_percent="0.92" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:text="@string/done"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/guideline19" />

</androidx.constraintlayout.widget.ConstraintLayout>`
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    
        <androidx.cardview.widget.CardView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:cardCornerRadius="10dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <ImageView
                android:id="@+id/avatarIV"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_marginVertical="5dp"
                android:layout_marginBottom="5dp"
                android:padding="5dp"
                app:srcCompat="@drawable/avatar_10" />
        </androidx.cardview.widget.CardView>
    </androidx.constraintlayout.widget.ConstraintLayout>```
    
    

```class AvatarDialogFragment: Fragment() {


    private lateinit var avatarRecyclerView: RecyclerView
    private val avatarVM by viewModel<AvatarDialogFragmentViewModel>()
    private var adapter: AvatarAdapter? = AvatarAdapter(emptyList())

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.avatar_dialog_fragment, container, false)
        avatarRecyclerView = view.findViewById(R.id.avatarRecyclerView)
        avatarRecyclerView.layoutManager = GridLayoutManager(context, 3)
        avatarRecyclerView.adapter = adapter

        return view
    }

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

    }
    
    fun updateUI(avatars: List<AvatarModel>) {
        adapter = AvatarAdapter(avatars)
        avatarRecyclerView.adapter = adapter
    }

    private inner class AvatarHolder(item: View) : RecyclerView.ViewHolder(item),
        View.OnClickListener {
        val binding = AvatarItemDialogFragmentBinding.bind(item)
        lateinit var avatar: AvatarModel

        init {
            itemView.setOnClickListener(this)
        }

        fun bind(
            avatarModel: AvatarModel
        ) = with(binding) {
            avatar = avatarModel

            when (avatar.name) {
                "avatar_1.png" -> {
                    avatarIV.setImageResource(R.drawable.avatar_1)
                    Log.i(TAG, "avatar_1")
                }
                "avatar_2.png" -> {
                    avatarIV.setImageResource(R.drawable.avatar_2)
                    Log.i(TAG, "avatar_2")
                }
                "avatar_3.png" -> {
                    avatarIV.setImageResource(R.drawable.avatar_3)
                    Log.i(TAG, "avatar_3")
                }
                "avatar_4.png" -> avatarIV.setImageResource(R.drawable.avatar_4)
                "avatar_5.png" -> avatarIV.setImageResource(R.drawable.avatar_5)
                "avatar_6.png" -> avatarIV.setImageResource(R.drawable.avatar_6)
                "avatar_7.png" -> avatarIV.setImageResource(R.drawable.avatar_7)
                "avatar_8.png" -> avatarIV.setImageResource(R.drawable.avatar_8)
                "avatar_9.png" -> avatarIV.setImageResource(R.drawable.avatar_9)
                "avatar_10.png" -> avatarIV.setImageResource(R.drawable.avatar_10)
                else -> {}
            }
        }

      
        override fun onClick(v: View?) {

        }
    }

    private inner class AvatarAdapter(
        var avatars: List<AvatarModel>,
    ) :
        RecyclerView.Adapter<AvatarHolder>() {

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AvatarHolder {
            val view = LayoutInflater.from(parent.context)
                .inflate(R.layout.avatar_item_dialog_fragment, parent, false)
            return AvatarHolder(view)
        }

        override fun getItemCount(): Int = avatars.size
        override fun onBindViewHolder(holder: AvatarHolder, position: Int) {
            holder.bind(avatars[position])
        }
    }`

Ответы (0 шт):