FrameLayout с двумя дочерними элементами ( Some View и ProgressBar, с одним только видимым в любой момент). Как правильно настроить LayoutParams

Если я хочу показать представление с содержимым, для извлечения которого требуется время, я обычно включаю его в FrameLayout с рядом ProgressBar. Показывать прогрессбар при извлечении и отображать представление, как только контент станет доступным.

Пример с textView.

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/selectableItemBackground"
        android:clickable="true">

        <TextView
            android:id="@+id/addressTv"
            android:layout_width="match_parent"
            android:minLines="4"
            android:maxLines="4"
            android:layout_height="match_parent"/>

        <ProgressBar
            android:id="@+id/addressLoadingBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:indeterminate="true" />
</FrameLayout>

В этом примере только один из 'addressTv' или 'addressLoadingBar' показывает в любой данный момент, другой - 'GONE'.

Но я не могу понять, как заставить FrameLayout иметь фиксированную высоту. В этом случае максимум детской высоты. С приведенным выше макетом, он меняется, когда мы переключаемся между дочерними элементами.

2 ответа

Я предлагаю переключиться на RelativeLayout, чтобы оба ребенка были видны при накачке макета. Затем установите тот, который не нужен, на невидимый, и измените, как только он будет готов. Затем сделайте индикатор выполнения невидимым.

  1. У вас есть проблема круговой зависимости - ваша высота FrameLayout равна wrap_content в то время как ваша высота TextView match_parent, Вы можете изменить высоту TextView на wrap_content

  2. Как @Disco упомянул в комментариях, используя View.INVISIBLE вместо View.GONE будет, вероятно, решить проблему. Когда представление "ушло", оно просто исчезает из иерархии представлений, тогда как когда оно "невидимо", оно не может быть видно, но все еще находится там логически, поэтому макет, зависящий от невидимого представления, не затрагивается его "исчезновением".

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