По тому, что я изучал для Constrainlayout -
Для большинства контейнерных классов пометка видимости виджета как GONE
полностью удаляет его из всего, что касается измерения и
макет контейнера. Это как если бы виджет никогда не существовал, хотя
вы в состоянии «добавить его обратно», просто сделав его видимым
. В Constrainlayout, GONE виджеты обрабатываются как не имеющие размера (ширина и высота).
0) и без полей. Тем не менее, ConstraintLayout будет по-прежнему
ограничения чести, связанные с этими виджетами GONE, принимая во внимание
их нулевой размер и статус нулевой маржи. Это позволяет ваши ограничения
все еще работать, а не ломаться целиком.
Но практически я тестировал с RelativeLayout и ConstraintLayout, и результаты те же. Даже ограничения уважения RelativeLayout, связанные с этими виджетами GONE. В приведенном ниже коде второе текстовое представление выравнивается внизу первого текстового просмотра, а третье текстовое представление выравнивается внизу второго текстового просмотра. Если я пропущу второе текстовое представление, третье текстовое представление будет выровнено в нижней части первого текстового представления, а не поверх него. Это означает, что второе текстовое представление android: layout_below = "@ id / first" будет учитываться даже после его отмены.
По тому, что я изучал для Constrainlayout -
Нулевой размер не подлежит обсуждению. Тем не менее, возможно, что вы можете
все еще хочу, чтобы поля были приняты во внимание. Для этого есть
атрибуты, такие как app: layout_goneMarginStart, которые вы можете использовать. Как
Имя атрибута предполагает, что они обеспечивают поля для использования, когда
Сам виджет помечен как GONE.
Но практически я добавил app: layout_goneMarginTop = "@ dimension / dp60" во второй текстовый вид Gone, но позиция третьего текстового обзора осталась прежней.
RelativeLayout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/first"
android:text="first"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/second"
android:layout_below="@id/first"
android:text="second"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/third"
android:layout_below="@id/second"
android:text="third"/>
</RelativeLayout>
ConstraintLayout
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/first"
android:text="first"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:id="@+id/second"
app:layout_constraintTop_toBottomOf="@+id/first"
android:text="second"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/third"
android:layout_below="@id/second"
app:layout_constraintTop_toBottomOf="@+id/second"
android:text="third"/>
</android.support.constraint.ConstraintLayout>