#java #android #kotlin #android-layout #layout
Вопрос:
У меня есть макет, который содержит множество представлений внутри, допустим, иерархия такова :
- Список координаторов
- NestedScrollView
- Ограничение
- Ограничение
- Некоторые взгляды
- Вид (разделитель)
- Ограничение
- Некоторые взгляды
- Вид (разделитель)
- и т.д…
- Ограничение
- Ограничение
- включить панель приложений
- MyCustomProgressBar
- NestedScrollView
- закрыть список координаторов
Дело в том, что я создал Group
с constraint_referenced_ids
идентификаторами, которые я хочу скрыть (они находятся внутри дерева иерархии, но когда я пытаюсь скрыть их и показать другому, они не скрываются, я все равно их вижу.
Моя идея в том, что я хочу, чтобы этот макет был таким, как сейчас, но добавьте панель прогресса, чтобы при загрузке была видна только эта панель прогресса, например
Я выполняю вызов api
Индикатор выполнения виден Я получил ответ от api Скрыть индикатор выполнения Сделать видимой группу и заполнить значения внутри
Я попытался добавить их внутрь CoordinatorLayout
следующим образом :
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/myRoot"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<ConstraintLayout>...</ConstraintLayout>
<include
android:id="@ id/app_bar"
layout="@layout/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<MyCustomProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:id="@ id/my_custom_progress_bar"/>
<androidx.constraintlayout.widget.Group
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="lot_of_ids"
android:id="@ id/myGroup"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Но я не мог заставить это работать, чего мне не хватает?
Идея в общем-то, чтобы иметь возможность продолжать использовать тот большой макет, как это было, но просто добавить какие-то взгляды, например, ProgressBar
а также EmptyCustomView
, чтобы показать их, не дублируя информацию, просто показывая, что точный вид, я делал это много раз, но не в CoordinatorLayout
, как разделение его на «Штаты», когда государство идет загрузка потом показать только прогрессбар, когда государство пусто, показать на EmptyCustomView и когда государство успех тогда показать макет, как это с начала, но скрывает другие.
Ответ №1:
Я не совсем понимаю ваш вопрос. Однако я делаю вывод, что вы пытаетесь скрыть некоторые представления, и это легко сделать программно.
Шаг 1: Предоставьте представление, чтобы скрыть идентификатор в XML-объявлении. Скажем, это текстовое представление.
<TextView
android:id="@ id/view_to_hide"
.../>
Шаг 2: Объявите представление в своем файле Java.
TextView toHide = (TextView) findViewById(R.id.view_to_hide);
Шаг 3: Везде, где вам нужно, скройте представление, вызвав setVisibility
для него метод.
toHide.setVisibility(View.VISIBLE); //for visible
toHide.setVisibility(View.INVISIBLE); //for invisible
Есть и другие ценности, такие как View.GONE
; однако я нахожу VISIBLE
их INVISIBLE
достаточными для всех моих целей.
Также обратите внимание, что этот метод работает буквально для всего, что расширяет View
класс (например, он может быть вызван даже LinearLayout
для s и тому подобного). В зависимости от настройки View.INVISIBLE
вид не может получить фокус и не может быть нажат. Я надеюсь, что этот ответ поможет.
Ответ №2:
Посмотрите на View.setVisibility(Просмотр.УШЕЛ / Просмотр.ВИДИМЫЙ / Видимый.НЕВИДИМЫЙ).
<ConstraintLayout
android:visibility="gone">
...
</ConstraintLayout>