То, что должно было быть простым упражнением, сейчас вызывает у меня много проблем, поэтому я буду благодарен за любую помощь!
У меня есть 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" />
Результаты
Спасибо за вашу помощь .