同じサイズの4つのボタンがある横型のLinearLayout
をConstraintLayout
に変換しようとしています。問題は、LinearLayout
で1つ以上のボタンをAndroid:visibility="gone"
に設定すると、残りのボタンのサイズが変更され、スペース全体(すべて同じサイズになります)とConstraintLayout
ボタンは削除されていますが、スペースを確保しています。
EDIT:アプリの状態に応じて、異なるボタンが表示されます。
ConstraintLayout
をLinearLayout
のように動作させるために何を変更する必要がありますか?
EDIT:ConstraintLayout(制約参照)に誤りを見つけたので、それと画像を更新しました(問題はまだ存在しています)。
LinearLayout
xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="horizontal">
<Button
Android:id="@+id/b1"
Android:text="B1"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="50"
/>
<Button
Android:id="@+id/b2"
Android:text="B2"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="50"
Android:visibility="gone"
/>
<Button
Android:id="@+id/b3"
Android:text="B3"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="50"
/>
<Button
Android:id="@+id/b4"
Android:text="B4"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="50"
/>
</LinearLayout>
EDIT:ConstraintLayout
xml:
<?xml version="1.0" encoding="utf-8"?>
<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="match_parent">
<Button
Android:id="@+id/b1"
Android:text="B1"
Android:layout_width="0px"
Android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/b2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_weight="1"
/>
<Button
Android:id="@+id/b2"
Android:text="B2"
Android:layout_width="0px"
Android:layout_height="wrap_content"
Android:visibility="gone"
app:layout_constraintLeft_toRightOf="@+id/b1"
app:layout_constraintRight_toLeftOf="@+id/b3"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_weight="1"
/>
<Button
Android:id="@+id/b3"
Android:text="B3"
Android:layout_width="0px"
Android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@+id/b2"
app:layout_constraintRight_toLeftOf="@+id/b4"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_weight="1"
Android:layout_marginTop="0dp"/>
<Button
Android:id="@+id/b4"
Android:text="B4"
Android:layout_width="0px"
Android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@+id/b3"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_weight="1"
/>
</Android.support.constraint.ConstraintLayout>
レイアウトはConstraintLayout
に簡単に変換できます。次の手順に従ってください。
おそらく、レイアウトを次のように変更できます。
<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="horizontal">
<Button
Android:id="@+id/b1"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:text="B1"
app:layout_constraintBaseline_toBaselineOf="@+id/b3"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/b3"
tools:layout_constraintBaseline_creator="1"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintRight_creator="1" />
<Button
Android:id="@+id/b2"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:text="B2"
Android:visibility="gone"
app:layout_constraintBottom_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_constraintBottom_creator="1"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintRight_creator="1"
tools:layout_constraintTop_creator="1" />
<Button
Android:id="@+id/b3"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginEnd="128dp"
Android:layout_marginLeft="128dp"
Android:layout_marginRight="128dp"
Android:layout_marginStart="128dp"
Android:text="B3"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintRight_creator="1"
tools:layout_constraintTop_creator="1" />
<Button
Android:id="@+id/b4"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:text="B4"
app:layout_constraintBaseline_toBaselineOf="@+id/b3"
app:layout_constraintLeft_toRightOf="@+id/b3"
app:layout_constraintRight_toRightOf="parent"
tools:layout_constraintBaseline_creator="1"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintRight_creator="1" />
</Android.support.constraint.ConstraintLayout>
既存のレイアウトをConstraintLayout
に切り替えるのに苦労している場合は、先に進んでAndroid Studioの内部設計ツールを試してみてください。それを支援することができます。 デザインタブで開きますコンポーネントツリーウィンドウで、変換する要素を右クリックしてConstraintLayoutに変換を選択します。