Как скрыть некоторые представления в представлении координатора

#java #android #kotlin #android-layout #layout

Вопрос:

У меня есть макет, который содержит множество представлений внутри, допустим, иерархия такова :

  • Список координаторов
    • NestedScrollView
      • Ограничение
        • Ограничение
          • Некоторые взгляды
        • Вид (разделитель)
        • Ограничение
          • Некоторые взгляды
        • Вид (разделитель)
        • и т.д…
    • включить панель приложений
    • MyCustomProgressBar
  • закрыть список координаторов

Дело в том, что я создал 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>