Как установить высоту отображения кадров в соответствии с одним из дочерних компонентов

#android #android-layout #android-framelayout #android-layout-weight #android-layoutparams

Вопрос:

У меня есть следующий фрейм, содержащий TextView и ProgressBar . В данный момент времени отображается только один из них. hideText Флаг изначально установлен в значение false.

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@ id/textview_detail_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@{model.text}"
            android:visibility="@{model.hideText}" />

        <ProgressBar
            android:id="@ id/progress_loader"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="@{!model.hideText}" />
    </FrameLayout>
 

Текст в файле TextView извлекается динамически, поэтому высота этого компонента неизвестна до выполнения. Когда я устанавливаю hideText флажок true , высота макета рамки уменьшается в соответствии с индикатором выполнения. Тем не менее, я хотел бы, чтобы макет рамки сохранял свою начальную высоту (т. Е. Высоту TextView и отображал индикатор выполнения посередине.

Есть ли какой-либо способ указать свойство ProgressBar ‘s android:layout_height , соответствующее высоте TextView?

Комментарии:

1.Просто не заставляй textview_detail_title GONE меня делать это INVISIBLE .

Ответ №1:

Вам нужно импортировать представление в файл макета.

 <data>
    <import type="android.view.View"/>
    ...
</data>
 

И чем для текста сделать это:

 android:visibility="@{model.hideText == true ? View.INVISIBLE : View.VISIBLE}"
 

И для прогрессбара это:

 android:visibility="@{model.hideText == true ? View.VISIBLE : View.INVISIBLE}"