web-dev-qa-db-fra.com

Comment inclure une mise en forme de contrainte dans une autre mise en forme et définir une contrainte entre chaque

J'utilise constraintLyout v 1.0.1.

Je voudrais inclure dans mon xml un sous-élément ConstraintLayout correspondant à une partie de ma présentation globale (qui est lui-même un élément ConstraintLayout). Je scinde la mise en page en deux xmls pour utiliser cette sous-partie ailleurs

J'ai essayé cela, mais je n'ai aucun contrôle sur l'endroit où placer la disposition de ma contrainte secondaire dans le parent. Je me demande si je dois tout placer dans le même fichier XML ou si c'est une solution pour utiliser des fichiers séparés.

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>

Le résultat est ceci Résultat actuel

Mais je veux que ce soit ceci Résultat attend

J'ai essayé ça mais ça ne marche pas

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

Je serais heureux d'avoir vos solutions,

Merci

38
Kélian

En fait trouvé une solution. Android Studio ne complète pas automatiquement les paramètres de constraintLayout dans une balise include, mais ils ont un impact sur celle-ci tant que vous indiquez une taille.

<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

Pour inclure une disposition de contrainte et la contraindre en fonction de vos besoins, vous devrez donner largeur et hauteur à la disposition incluse comme ceci:

<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

Vous pourriez éviter les contraintes ConstraintLayout au niveau de l'élément d'inclusion. Je viens de <include/> c'est comme ça.

Fichier de mise en forme MainActivity:

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

Fichier de disposition de la barre d'outils:

<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

Pour inclure une mise en page de contrainte à une autre mise en page de contraint, utilisez une autre mise en page pour chaque parent de la mise en page d'inclusion ... Comme ci-dessous:

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

c'est un travail sur ma mise en page XML. Profitez du code.

0
pravin