Как изменить ширину дочернего элемента FlexBox после его добавления в FlexBox

У нас есть линейный макет с кнопкой и видом (линия, которая отделяет кнопку от других видов). Мы программно добавляем linearLayout к элементу flexBox и устанавливаем для FlexGrow дочернего элемента значение 1f. Проблема в том, что я не могу заставить внутреннюю кнопку соответствовать ширине родительского линейного макета и одновременно установить минимальную ширину.

Когда я устанавливаю ширину кнопок (в xml) равной match_parent, родительский элемент становится размером с текст кнопки (он должен быть на 20% больше в случае изменения текста). В этом случае setMinnimumWidth(), кажется, не влияет.

Но когда я устанавливаю ширину кнопок (в xml) на WrapContent, тогда setMinimumWidth() работает. Кнопка отображается в правильном размере, но родительский элемент намного больше, чем кнопка (предположительно, чтобы заполнить оставшееся пространство в строке flexBox.

Как получить одинаковый размер кнопки и ее родителя, а также установить минимальную ширину?

XML для элемента, который мы добавляем flexbox,

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:orientation="vertical"
    android:paddingLeft="6dp"
    android:paddingRight="6dp"
    android:paddingBottom="16dp"
    >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">




    <Button
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/button_date_time"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="DATE"
        android:gravity="left|center_vertical"
        android:background="@android:color/transparent"
        android:drawableRight="@drawable/caret"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:paddingTop="2dp"
        android:background="@android:color/darker_gray"/>


</LinearLayout>

Код, который добавляет элемент и устанавливает ширину

val button = linearLayout.findViewById(R.id.button_id) as Button
button.width = width
button.minimumWidth = width

flexBox.addView(linearLayout)
val layoutParams = linearLayout.layoutParams
layoutParams.width = width
linearLayout.layoutParams = layoutParams
linearLayout.invalidate()
linearLayout.requestLayout()

код есть в котлине.

0 ответов

Другие вопросы по тегам