Могу ли я установить ширину столбца в процентах в GridLayoutManager? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть диалоговое окно с предупреждением, которое содержит RecyclerView. Каждый элемент в утилизаторе является простым флажком. Мне нужно нарисовать его в три столбца.

Для этого я использую GridLayoutManager

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

В результате я вижу, что это

enter image description here

Неплохо. Проблема в том, что мне нужно установить ширину каждого столбца равной 33% ширины моего диалога. У меня нет фиксированной ширины моего флажка в пикселях, так как текст может варьироваться. Вот макет, используемый для утилизатора.

<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable name="item" type="..." />
    </data>

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="@={item.enabled}"
        android:text="@{item.name}"
        android:minWidth="40dp"/>

</layout>

Мой Recycler создан с шириной, равной родительской

 <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

Есть идеи, как установить ширину в процентах?

1 Ответ

2 голосов
/ 27 марта 2019

Если ваш RecyclerView выложен правильно, вы можете увеличить размер ViewHolder, переопределив параметры макета в LayoutManager:

layoutManager = object : GridLayoutManager(context, 3, GridLayoutManager.HORIZONTAL, false){
    override fun checkLayoutParams(lp: RecyclerView.LayoutParams) : Boolean {
        // force width of viewHolder to be a fraction of RecyclerViews
        // this will override layout_width from xml
        lp.width = width / spanCount
        return true
    }
}
...