web-dev-qa-db-ja.com

制約レイアウトを別の制約レイアウトに含め、それぞれの間に制約を設定する方法

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" />

私はあなたの解決策を持ってうれしいです、

ありがとうございました

38
Kélian

実際に解決策を見つけました。 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"
        />
72
Kélian

1つの制約レイアウトを含め、必要に応じて制約するには、次のように含まれるレイアウトに幅と高さを与える必要があります。

<include
        Android:id="@+id/shop_card_layout"
        layout="@layout/shop_card_one"
        Android:layout_height="wrap_content"
        Android:layout_width="300dp"
        Android:layout_marginTop="8dp"
        app:layout_constraintStart_toStartOf="@id/heading_tv"
        app:layout_constraintTop_toBottomOf="@+id/heading_tv" />
17
Dhruvam Sharma

IncludeアイテムでConstraintLayout制約を回避できます。私はただ<include/>そのまま。

MainActivity Layoutファイル:

<?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">

    <include
        Android:id="@+id/toolbarLayout"
        layout="@layout/layout_toolbar" />

    <TextView
        Android:id="@+id/textView2"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="8dp"
        Android:layout_marginEnd="8dp"
        Android:layout_marginStart="8dp"
        Android:layout_marginTop="8dp"
        Android:text="CONTENTS"
        app:layout_constraintBottom_toBottomOf="@+id/footerLayout"
        app:layout_constraintEnd_toEndOf="@+id/footerLayout"
        app:layout_constraintStart_toStartOf="@+id/footerLayout"
        app:layout_constraintTop_toTopOf="@+id/footerLayout" />

    <include
        Android:id="@+id/footerLayout"
        layout="@layout/layout_footer" />

</Android.support.constraint.ConstraintLayout>

ツールバーレイアウトファイル:

<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.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="@color/colorPrimary"
        Android:minHeight="?attr/actionBarSize"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

        <TextView
            Android:id="@+id/toolbarTitleTextView"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center"
            Android:text="@string/hidden"
            Android:textColor="@Android:color/white"
            tools:layout_editor_absoluteX="192dp"
            tools:layout_editor_absoluteY="19dp" />

    </Android.support.v7.widget.Toolbar>
</Android.support.constraint.ConstraintLayout>
1
LiTTle

1つの制約レイアウトを他の制約レイアウトに含めて、インクルードレイアウトの各親にもう1つの制約レイアウトを使用するには、次のようにします。

<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:background="@drawable/new_landing_bg"
tools:context=".activity.DesignTestActivity">

<Android.support.constraint.ConstraintLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginStart="16dp"
    Android:layout_marginEnd="16dp"
    Android:layout_marginBottom="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent">

    <include layout="@layout/common_footer_layout" />

</Android.support.constraint.ConstraintLayout>

これは私のxmlレイアウトで動作します。コードをお楽しみください。

0
pravin