web-dev-qa-db-fra.com

Android ajouter une autre disposition dans ConstraintLayout en utilisant la balise include

Je fais une application simple pour tester en utilisant ConstraintLayout. Mais j'ai un problème.

Voici mon code

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout 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.support.constraint.ConstraintLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context="com.example.user.myapplication.activity.MainActivity">

    <Button
        Android:id="@+id/btn_launch"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginEnd="8dp"
        Android:layout_marginTop="16dp"
        Android:text="launch"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        Android:id="@+id/text_view"
        Android:layout_width="100dp"
        Android:layout_height="50dp"
        Android:layout_marginEnd="16dp"
        Android:layout_marginTop="16dp"
        Android:text="Hello World!"
        app:layout_constraintHorizontal_bias="1"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btn_launch" />

    <include
        layout="@layout/content_main"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/text_view" />

</Android.support.constraint.ConstraintLayout>

content_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout 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.support.constraint.ConstraintLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:orientation="vertical">

    <TextView
        Android:id="@+id/textView2"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="8dp"
        Android:text="123456"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        Android:id="@+id/textView3"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="8dp"
        Android:layout_marginRight="8dp"
        Android:layout_marginTop="8dp"
        Android:text="98765"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <TextView
        Android:id="@+id/textView"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="8dp"
        Android:layout_marginRight="8dp"
        Android:layout_marginTop="8dp"
        Android:text="abc"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3" />

</Android.support.constraint.ConstraintLayout>

Résultat du code

Problem

Je veux que " content_main " soit sous le "monde hellow!" Affichage.

J'utilise RelativeLayout, LinearLayout, ConstraintLayout à l'élément " content_main ". mais pas de travail.

Je trouve n'importe quelle solution. Mais je trouve juste que Comment utiliser ConstraintLayout.

La balise Android "include" ne fonctionne-t-elle pas chez ConstraintLayout?

32
BlueBright

Android include tag fonctionne avec ConstraintLayout, mais vous devez déclarer la taille de la mise en page que vous souhaitez inclure avec les attributs suivants.

<include
     layout="@layout/content_main"
     Android:layout_width="100dp"
     Android:layout_height="250dp"
     .../>

Pour une disposition incluse ayant une hauteur dynamique, utilisez wrap_content comme valeur dans layout_height ou layout_width attributs de la balise include.

<include
    Android:id="@+id/input_include"
    layout="@layout/task_input"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"/>

Après cela, vos contraintes devraient fonctionner.

74
taurelas