Ответы пользователя по тегу Material Design
  • Как создать два ровных ряда в recycler-view?

    @Gnoemes
    Как вариант можешь установить ширину карточки "match_parent", а отступы указать через RecyclerView.ItemDecorator.
    Декоратор

    spacing - расстояние между элементами
    margin - отступ между крайними элементами и экраном, по умолчанию равно spacing

    import android.graphics.Rect
    import android.view.View
    import androidx.recyclerview.widget.GridLayoutManager
    import androidx.recyclerview.widget.RecyclerView
    
    class GridItemDecorator(
            private val spacing: Int,
            private val margin: Int = spacing
    ) : RecyclerView.ItemDecoration() {
    
        private val halfSpacing = spacing / 2
    
        override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) {
            val columns = (parent.layoutManager as? GridLayoutManager)?.spanCount ?: 1
            val rows = parent.adapter?.itemCount?.div(columns) ?: 1
    
            val pos = parent.getChildAdapterPosition(view)
    
            fun setTopSpacing() {
                if (pos / columns + 1 == 1) {
                    outRect.top = margin
                } else {
                    outRect.top = halfSpacing
                }
            }
    
            fun setBottomSpacing() {
                if (pos / columns + 1 == rows) {
                    outRect.bottom = margin
                } else {
                    outRect.bottom = halfSpacing
                }
            }
    
            fun setLeftSpacing() {
                if (pos % columns == 0) {
                    outRect.left = margin
                } else {
                    outRect.left = halfSpacing
                }
            }
    
            fun setRightSpacing() {
                if (pos % columns == columns - 1) {
                    outRect.right = margin
                } else {
                    outRect.right = halfSpacing
                }
            }
    
            setTopSpacing()
            setBottomSpacing()
            setLeftSpacing()
            setRightSpacing()
        }
    }

    5c2cd234a1cfe583817132.png
    Ответ написан
    Комментировать