Элементы группы Android Layout
У меня есть следующий макет:
<!-- section 1 -->
<LinearLayout>
<ImageView/>
<TextView/>
</LinearLayout>
<ViewPager/>
<View/>
<!-- section 2 -->
<LinearLayout>
<ImageView/>
<TextView/>
</LinearLayout>
<ViewPager/>
<View/>
<!-- section 3 -->
<LinearLayout>
<ImageView/>
<TextView/>
</LinearLayout>
<ViewPager/>
<View/>
У меня есть эти 3 раздела, и я пытаюсь установить видимость каждого раздела. Но если я пытаюсь установить видимость раздела 1, мне нужно установить каждый элемент (LinearLayout, ViewPager, View) отдельно. Есть ли способ, которым я могу сгруппировать каждый раздел, поэтому мне нужно установить видимость только один раз, и весь раздел будет отключен?
заранее спасибо
2 ответа
Если макет верхнего уровня ConstraintLayout
Вы можете поместить все представления каждого раздела в группу. Установка видимости группы изменяет видимость всех ее участников. Увидеть Group
,
Этот класс контролирует видимость набора ссылочных виджетов. Ссылки на виджеты добавляются в список идентификаторов, разделенных запятыми, например:
<android.support.constraint.Group
android:id="@+id/group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
app:constraint_referenced_ids="button4,button9" />
Если макет верхнего уровня не ConstraintLayout
тогда у вас есть несколько вариантов.
Установите видимость каждого члена секции индивидуально (пытаясь избежать этого, но это вариант). Вы можете настроить свои собственные внутренние групповые ссылки, чтобы сделать это проще.
Завернуть каждый раздел в другой
ViewGroup
такие какFrameLayout
, Настройка видимостиViewGroup
Родитель влияет на видимость всех своих детей.
-- секция 1 --
FrameLayout
LinearLayout
ImageView
TextView
/ LinearLayout
ViewPager
Посмотреть
- раздел 2 -
FrameLayout
LinearLayout
ImageView
TextView
/ LinearLayout
ViewPager
Посмотреть
- раздел 3 -
FrameLayout
LinearLayout
ImageView
TextView
/ LinearLayout
ViewPager
Посмотреть
Конечно, ViewGroup
может быть LinearLayout
, RelativeLayout
и т. д. - все, что имеет смысл. FrameLayout
используется в качестве примера
Просто вызовите setVisibility() в родительском макете, который содержит представление, которое вы хотите скрыть в основной деятельности;
в котором флаги VISIBILITY в setVisibility будут определять видимость вида. Есть 3 флага
- VISIBLE
- INVISIBLE
- УШЕЛ
в вашем случае, скажем, раздел 1 имеет линейный макет с идентификатором layout_one
код должен выглядеть так:
LinearLayout layoutOne= (LinearLayout) findViewById(R.id.layout_one);
layoutOne.setVisibility(View.INVISIBLE);