Равный интервал между строками в GridLayoutManager - PullRequest
0 голосов
/ 02 мая 2020

То, что должно было быть простым упражнением, сейчас вызывает у меня много проблем, поэтому я буду благодарен за любую помощь!

У меня есть RecyclerView с ГОРИЗОНТАЛЬНЫМ GridLayoutManager. Я хочу равный интервал между строками и столбцами без каких-либо полей по краям всего представления. Поэтому я добавил простой ItemDecoration, однако, похоже, он дает неожиданные результаты.

Весь мой соответствующий код приведен ниже, пожалуйста, дайте мне знать, если вам нужно что-нибудь еще!

Украшение предметов

class ColorDotDecoration : RecyclerView.ItemDecoration() {

    override fun getItemOffsets(
        outRect: Rect,
        view: View,
        parent: RecyclerView,
        state: RecyclerView.State
    ) {

        val margin = parent.resources.getDimensionPixelSize(R.dimen.margin)
        val position = parent.getChildAdapterPosition(view)

        val spanCount = (parent.layoutManager as GridLayoutManager).spanCount

        outRect.set(
            if (position < spanCount) 0 else margin,
            0,
            0,
            if (position % spanCount == spanCount - 1) 0 else margin
        )

    }
}

Код фрагмента

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

        add_goal_colors.apply {

            layoutManager =
                GridLayoutManager(context, COLOR_DOT_SPAN, GridLayoutManager.HORIZONTAL, false)

            val ta = resources.obtainTypedArray(R.array.goal_colors)
            adapter = ColorDotAdapter(Array(ta.length()) {

                ta.getColor(it, 0)
            })
            ta.recycle()

            addItemDecoration(ColorDotDecoration())
        }
    }
}

Код вида адаптера

<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/add_goal_color_dot_size"
    android:layout_height="@dimen/add_goal_color_dot_size"
    android:background="@drawable/color_dot" />

Результаты Results

Спасибо за вашу помощь .

...