Я хочу заполнить RecyclerView двумя различными типами элементов:
Столбец в середине должен иметь только BIG_ITEM
, а остальные столбцы должны иметь SMALL_ITEM
, используя GridLayoutManager
с 3столбцы и указание типов элементов как
position % 3 == 1 -> BIG_ITEM else SMALL_ITEM
Я могу добиться этого, но проблема в BIG_ITEM и SMALL_ITEM остается в порядке со строкой, поэтому SMALL_ITEM не заполняют пробел, и я получаювместо этого это представление
[! [введите описание изображения здесь] [1]] [1]
Я пытался использовать ItemDecoration, чтобы задать постоянный разрыв между маленькими и большими плитками, но это не удалосьработать либо.
Если я использую плитки StaggeredGridLayout, то обертка пропускает, но порядок меняется, поэтому у меня больше нет плиток Big посередине.
Итак, мой вопрос: как мне достичь этого вида? 4 маленькая высота плитки должна быть равна 3 большой высоте плитки, а большие плитки должны быть посередине.Тем не менее, поле между плитками должно быть равно
[! [Введите описание изображения здесь] [2]] [2]
override fun getItemViewType(position: Int): Int {
return if (position.rem(3) == 1) {
BIG_VIEW
} else {
SMALL_VIEW
}
}
Элемент Украшение, которое я пробовал:
class ItemOffsetDecoration(private val mItemOffset: Int) : RecyclerView.ItemDecoration() {
constructor(@NonNull context: Context, @DimenRes itemOffsetId: Int) : this(context.resources.getDimensionPixelSize(itemOffsetId)) {}
override fun getItemOffsets(
outRect: Rect, view: View, parent: RecyclerView,
state: RecyclerView.State
) {
super.getItemOffsets(outRect, view, parent, state)
outRect.set(mItemOffset, mItemOffset, mItemOffset, mItemOffset)
}
}
большой предмет:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="wrap_content"
>
<ImageView
android:id="@+id/imageView_kids_item"
android:layout_width="500dp"
android:layout_height="266dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/icon_no_image" />
</android.support.constraint.ConstraintLayout>
маленький предмет:
<ImageView
android:id="@+id/imageView_kids_item"
android:layout_width="370dp"
android:layout_height="200dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/icon_no_image" />