ConstraintLayout ушел представление ведет себя так же, как RelativeLayout ушел представление - PullRequest
0 голосов
/ 07 мая 2018

По тому, что я изучал для 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>
...