2017-07-13 1 views
6

J'utilise ConstraintLayout où je vais montrer comme ci-dessousConstraintLayout, lorsque la vue dépendante de la contrainte a disparu, le point de vue de la mise en page se comportent bizarrement

enter image description here

Je voudrais cacher First (en utilisant disparu), et qui le point de vue j'attendre d'être comme ci-dessous (où ElasticBody s'étendra sur d'utiliser l'espace First de vue original ainsi.

enter image description here

Cependant, whe n J'ai défini First à gone, ma vue s'avère être comme ci-dessous (toutes les images à partir de la vue Android Studio Design). Mon Elastic Body est également manquant, et la hauteur s'est étirée bizarrement.

enter image description here

Mon code de mise en page comme ci-dessous

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="16dp"> 

    <TextView 
     android:id="@+id/txt_first" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#0ff" 
     android:text="First" 
     android:visibility="gone" 
     android:textSize="26sp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toStartOf="@+id/txt_body" 
     app:layout_constraintStart_toStartOf="parent" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <TextView 
     android:id="@+id/txt_body" 
     android:layout_width="0dp" 
     android:background="#f0f" 
     android:layout_height="wrap_content" 
     android:text="Elastic Body" 
     android:textSize="26sp" 

     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toStartOf="@+id/txt_tail" 
     app:layout_constraintStart_toEndOf="@+id/txt_first" 
     app:layout_constraintTop_toBTopOf="parent" /> 

    <TextView 
     android:id="@+id/txt_tail" 
     android:background="#ff0" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Tail" 
     android:textSize="26sp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toEndOf="parent" 
     app:layout_constraintStart_toEndOf="@+id/txt_body" 
     app:layout_constraintTop_toTopOf="parent" /> 

</android.support.constraint.ConstraintLayout> 

(Remarque, si vous supprimez le gone, vous obtenez la première vue de l'image). Pourquoi est-ce vrai? Comment est-ce que je peux réparer où First est parti, je pourrais le Elastic Body étirer correctement? P/s: Je sais comment faire dans LinearLayout et RelativeLayout ... mais je me demande si c'est une limitation sur ConstraintLayout?

Répondre

1

See Output :

essayer de suivre.

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:padding="16dp"> 

    <TextView 
     android:id="@+id/txt_first" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#0ff" 
     android:text="First" 
     android:textSize="26sp" 
     android:visibility="gone" 
     app:layout_constraintEnd_toStartOf="@+id/txt_body" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" /> 

    <TextView 
     android:id="@+id/txt_body" 
     android:layout_width="0dp" 
     android:background="#f0f" 
     android:layout_height="wrap_content" 
     android:text="Elastic Body" 
     android:textSize="26sp" 
     app:layout_constraintRight_toLeftOf="@+id/txt_tail" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintLeft_toRightOf="@+id/txt_first" 
     /> 

    <TextView 
     android:id="@+id/txt_tail" 
     android:background="#ff0" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Tail" 
     android:textSize="26sp" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintRight_toRightOf="parent" /> 

</android.support.constraint.ConstraintLayout> 
+0

Merci. Intéressant, enlever 'app: layout_constraintStart_toEndOf =" @ + id/txt_body "' de la 'queue' aide. Upvote votre réponse. Pouvez-vous élaborer la logique derrière? Merci! (Je ne sais pas qui ne vote pas, ils devraient au moins donner une raison ...) – Elye

+0

Après avoir réfléchi un moment, je pense que je comprends la logique. Je suis le tien comme réponse. Merci! (Faire une surexcitation de ma question si vous pensez que cela aide les autres) – Elye

+0

s'il vous plaît donnez-moi la raison du vote à la baisse. –

2

une chose que vous pouvez utiliser pour Visibility.GONE dans ConstraintLayout. vous pouvez utiliser Barriers pour cela.

si vous n'êtes pas au courant de Barriers alors s'il vous plaît vérifier: Barriers