Динамическая сетка фиксированного размера с Recyclerlayout - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужна сетка с фиксированным размером, но динамически изменяющимся количеством диапазонов (поэтому ячейки в сетке будут меняться в размере при изменении spancount).

Чего я не хочу, так это:

plus/minus change spancount/itemcount

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

    <!-- This constrainer view was something I just tested, didn't improve much. And felt hacky (I wanted to have the recyclerview as wrap content) !-->
    <View
        android:id="@+id/constrainer"
        android:layout_width="200dp"
        android:layout_height="200dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/grid"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constrainedWidth="true"
        app:layout_constrainedHeight="true"
        app:layout_constraintTop_toTopOf="@+id/constrainer"
        app:layout_constraintLeft_toLeftOf="@+id/constrainer"
        app:layout_constraintRight_toRightOf="@+id/constrainer"
        app:layout_constraintBottom_toBottomOf="@+id/constrainer"
        app:spanCount="3"
        tools:itemCount="9"
        tools:listitem="@layout/MyItem" />

И элемент сетки:

<View xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:background="#FF00FF00"/>

А ниже находится менеджер компоновки:

    grid.layoutManager = object : GridLayoutManager(this.context, adapter.size){
        override fun canScrollVertically(): Boolean {
            return false
        }

        override fun canScrollHorizontally(): Boolean {
            return false
        }
    }

Текущая настройка, опубликованная выше, работает в измерении x, но я не могу понять, смогу ли я удалить всю прокручиваемость и заставить ее работать в измерении Y.Я не могу заставить свои клетки правильно вырасти.

Использую ли я не тот инструмент (Recyclerview) для этой работы?Как мне лучше всего достичь желаемого поведения?(Я могу, вероятно, сделать Linearlayouts / constraintlayout, чтобы это сработало, но я думаю, что должен быть простой способ, которого мне не хватает)

1 Ответ

0 голосов
/ 26 февраля 2019

Публикация этого как частичного самостоятельного ответа, так как он работает, но не является оптимальным.С удовольствием приму ответ, в котором изложен более правильный способ сделать это.

Изменение размера представлений адаптера с помощью приведенного ниже кода на привязке адаптера:

val containerSize = itemView.resources.getDimension(R.dimen.grid_size)
itemView.layoutParams.height = (containerSize / size).toInt()
itemView.layoutParams.width = (containerSize / size).toInt()

size - число строк / столбцов.Обеспечивает поведение, которое я хочу, (хотя с некоторыми артефактами, когда size не делит grid_size равномерно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...