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, чтобы оба ребенка были видны при накачке макета. Затем установите тот, который не нужен, на невидимый, и измените, как только он будет готов. Затем сделайте индикатор выполнения невидимым.
У вас есть проблема круговой зависимости - ваша высота FrameLayout равна
wrap_content
в то время как ваша высота TextViewmatch_parent
, Вы можете изменить высоту TextView наwrap_content
Как @Disco упомянул в комментариях, используя
View.INVISIBLE
вместоView.GONE
будет, вероятно, решить проблему. Когда представление "ушло", оно просто исчезает из иерархии представлений, тогда как когда оно "невидимо", оно не может быть видно, но все еще находится там логически, поэтому макет, зависящий от невидимого представления, не затрагивается его "исчезновением".