以下に示すConstraintLayoutを使用しています
First
(非表示を使用)を非表示にしたいと思います。また、以下のように表示する予定です(ElasticBodyは元のFirst
ビュースペースも使用するためにストレッチします)。
ただし、実際にFirst
をgone
に設定すると、ビューは次のようになります(すべての画像はAndroid Studio Designビュー)からです。私のElastic Body
も欠落しており、高さが奇妙に拡大しました。
以下の私のレイアウトコード
<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>
(gone
を削除すると、最初の画像ビューが表示されます)。これはなぜですか? First
がなくなったときに、Elastic Body
正しく伸びますか?
p/s:LinearLayoutとRelativeLayoutでそれを行う方法は知っていますが、これがConstraintLayoutの制限かどうか疑問に思いますか?
以下を試してください。
最初のビューの左と上のconstarintを親に設定します。その後、ボディパーツの幅を「0dp」に設定し、左の制約を最初のビューの右側に、右の制約をテールビューの左側に設定します。
したがって、最初のビューの可視性を設定すると、ボディビューは必要に応じてストレッチされます。
<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>
ConstraintLayout
のVisibility.GONE
に使用できるもう1つのこと。そのためにBarriers
を使用できます。
Barriers
について知らない場合は、これをチェックしてください: バリア