web-dev-qa-db-ja.com

LinearLayoutをConstraintLayoutに変換する問題

同じサイズの4つのボタンがある横型のLinearLayoutConstraintLayoutに変換しようとしています。問題は、LinearLayoutで1つ以上のボタンをAndroid:visibility="gone"に設定すると、残りのボタンのサイズが変更され、スペース全体(すべて同じサイズになります)とConstraintLayoutボタンは削除されていますが、スペースを確保しています。

EDIT:アプリの状態に応じて、異なるボタンが表示されます。

ConstraintLayoutLinearLayoutのように動作させるために何を変更する必要がありますか?

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>

LinearLayout vs ConstraintLayoutConstraintLayout blueprint

10
Hanan

レイアウトはConstraintLayoutに簡単に変換できます。次の手順に従ってください。

  1. Android Studioのレイアウトエディター内のデザインタブに移動します
  2. コンポーネントツリーを開く
  3. 変換するLinearLayout(または他のレイアウト)を右クリックします
  4. 「LinearLayoutをConstraintLayoutに変換」をクリックします

13
Ahmad

おそらく、レイアウトを次のように変更できます。

<?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に変換を選択します。

3
Kamran Ahmed