Как найти ширину предмета в программе утилизации? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть recyclerview, который является просто горизонтальным списком кнопок.Я пытаюсь создать следующее поведение:

Если общая ширина всех комбинированных кнопок меньше общей ширины экрана, установите для ширины каждой кнопки значение (screenWidth / количество кнопок).

Я тестирую некоторый базовый код для получения / установки ширины кнопок, как в моем adapter классе:

 override fun onBindViewHolder(holder: TabViewHolder, position: Int) {

        Log.d("TEST-APP","Button Width: " + holder.button.width.toString())

        holder.button.width = 1080

        Log.d("VED-APP","New Button Width: " + holder.button.width.toString())

        holder.button.text = items[position].first
        holder.button.setOnClickListener {
            (context as MainActivity).updateCurrentImageLayout(items[position].second)
        }
    }

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

Как узнать фактическую ширину кнопки?

Вот мой макет, который определяет один столбец в моем recyclerview:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/tabButton"
        android:layout_width="match_parent"
        android:minWidth="120dp"
        android:layout_height="match_parent"
        android:text="Unset-Button-Text"/>


</android.support.constraint.ConstraintLayout>

1 Ответ

0 голосов
/ 23 мая 2018

Android возвращает ширину виджета только после того, как он измерен, и это происходит позже, чем onBindViewHolder.

Вы можете отложить запрос:

holder.button.post {
    Log.d("VED-APP","New Button Width: " + holder.button.width.toString()) 
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...