1. ホーム
  2. android

制約レイアウトを別の制約レイアウトにインクルードして、それぞれの間に制約を設定する方法

2023-09-18 03:32:58

質問

constraintLyout v 1.0.1を使っています。

私は、私のグローバルレイアウト(それ自体がConstraintLayoutです)の一部に対応するサブConstraintLayoutを、私のxmlに含めたいと考えています。このサブパーツを別の場所で使用するために、レイアウトを 2 つの xml に分割しました。

これを試してみましたが、親の中のサブ制約レイアウトをどこに配置するか、コントロールすることができません。同じ xml ファイルにすべてを配置しなければならないのか、または別々のファイルを使用するソリューションがあるのか、疑問に思っています。

tmp_1.xml

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:id="@+id/label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="LABEL1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="16dp"
        />
    <TextView
        android:id="@+id/label_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="LABEL2"
        app:layout_constraintStart_toStartOf="@id/label"
        app:layout_constraintEnd_toEndOf="@id/label"
        app:layout_constraintTop_toBottomOf="@id/label"
        android:layout_marginTop="16dp"
        />

    <include layout="@layout/tmp_2" />
</android.support.constraint.ConstraintLayout>

tmp_2.xml

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <TextView
        android:id="@+id/view_80"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="80th element"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="10dp"
        android:layout_marginStart="12dp"
        />
</android.support.constraint.ConstraintLayout>

結果はこのようになります。

しかし、私はそれがこのようにしたい

私はこれを試してみましたが、それは動作しません

<include 
    app:layout_constraintTop_toBottomOf="@id/label_2"
    layout="@layout/tmp_2" />

どのように解決するのですか?

実際に解決策を見つけました。 Android Studio は、include タグ内の constraintLayout パラメータをオートコンプリートしませんが、その include にサイズを与えている限り、その影響はあります。

<include
        layout="@layout/tmp_2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/label_2"
        />