J'utilise ConstraintLayout où je vais montrer ci-dessous
Je voudrais masquer First
(en utilisant gone), et la vue que je m'attends à être comme ci-dessous (où ElasticBody s’étendra pour utiliser également l’espace de vue First
original.
Cependant, lorsque je règle First
sur gone
, ma vue se présente comme ci-dessous (toutes les images à partir de Android Studio Design). Mon _Elastic Body
_ est également manquant et la hauteur a augmenté étrangement.
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_toTopOf="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>
_
(Notez que si vous supprimez le gone
, vous obtiendrez la première vue de l'image). Pourquoi cela est-il ainsi? Comment pourrais-je résoudre ce problème là où, lorsque mon First
sera parti, je pourrais étirer le _Elastic Body
_ correctement?
p/s: Je sais comment le faire dans LinearLayout et RelativeLayout ... mais je me demande s'il s'agit d'une limitation de ConstraintLayout?
Essayez de suivre.
Définissez la constarint gauche et supérieure de la première vue sur parent. Après cela, définissez la largeur de la partie du corps sur "0dp" et fixez la contrainte gauche au premier côté droit et la contrainte droite au côté gauche de la vue arrière.
Ainsi, chaque fois que vous définissez la visibilité de la première vue, la vue du corps disparaît comme vous le souhaitez.
<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>
Une dernière 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
, veuillez vérifier ceci: Barrières