web-dev-qa-db-fra.com

Est-il conseillé d'utiliser LinearLayout dans ConstraintLayout dans Android?

Je suis nouveau sur ConstraintLayout en Android et débutant sur Android aussi. J'ai une question. Est-il conseillé d'utiliser LinearLayout inside ConstraintLayout? Par exemple:

<?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"
    app:srcCompat="@drawable/landing_screen"
    Android:layout_height="match_parent"
    tools:context="com.braigolabs.braigo.landing.LandingActivity">

    <ImageView
        Android:id="@+id/imageView"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:scaleType="centerCrop"
        app:srcCompat="@drawable/landing_screen"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintVertical_bias="1.0"
        app:layout_constraintHorizontal_bias="1.0"
        tools:layout_constraintTop_creator="1"
        tools:layout_constraintRight_creator="1"
        tools:layout_constraintBottom_creator="1"
        tools:layout_constraintLeft_creator="1"/>

    <LinearLayout
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="51dp">

        <TextView
            Android:id="@+id/textView"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_marginEnd="66dp"
            Android:layout_marginStart="66dp"
            Android:gravity="center"
            Android:text="@string/login_welcome_braigolabs"                Android:textAppearance="@style/TextAppearance.AppCompat.Large"
            tools:layout_editor_absoluteX="93dp"
            tools:layout_editor_absoluteY="403dp"/>

        <Button
            Android:id="@+id/login_button"
            style="@style/Widget.AppCompat.Button.Colored"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:elevation="2dp"
            Android:text="@string/login_login_button_title"
            Android:textAllCaps="false"
            tools:layout_editor_absoluteX="116dp"
            tools:layout_editor_absoluteY="543dp"/>
    </LinearLayout>
</Android.support.constraint.ConstraintLayout>

Vous êtes également curieux de savoir à quel point le ConstraintLayout est populaire parmi les développeurs?

22
TechBee

Est-il conseillé d'utiliser LinearLayout dans ConstraintLayout?

Non ... habituellement.

En général, l'idée derrière ConstraintLayout est qu'elle vous permet de positionner tous vos enfants sans avoir à imbriquer d'autres ViewGroup à l'intérieur du ConstraintLayout. En tant que tel, je dirais que ce n'est pas conseillé.

Cependant, il y a sont certaines choses qu'un LinearLayout peut faire qu'un ConstraintLayout ne peut pas (tournant principalement autour de l'espacement pondéré des vues), et donc si vous en avez besoin cas d'angle particuliers dans votre mise en page, vous n'aurez pas d'autre option que de revenir à un LinearLayout.

quelle est la popularité de ConstraintLayout parmi les développeurs?

ConstraintLayout est relativement nouveau, mais il est assez puissant et certainement quelque chose que vous devez vous familiariser. Ce ne sera pas toujours l'outil parfait pour le travail à accomplir, mais il vous permettra souvent de créer facilement des mises en page sur lesquelles vous auriez autrement passé des heures.

Je ne peux pas parler des statistiques d'adoption généralisées, mais je peux dire que j'ai vu des tonnes de questions sur ce site sur l'utilisation correcte de ConstraintLayout, donc les développeurs du monde entier commencent clairement à travailler avec.

28
Ben P.

À partir du 2.0.0-alpha5 version de la bibliothèque constraintlayout, il est maintenant possible de déclarer un élément de disposition virtuelle Flow dans votre ConstraintLayout qui (comme son nom l'indique) détermine la manière dont les éléments sélectionnés doivent circuler ( par exemple verticalement, horizontalement) dans le ConstraintLayout. Il n'est donc plus nécessaire de déclarer un LinearLayout dans votre ConstraintLayout.

Par exemple, si vous vouliez que les éléments de votre ConstraintLayout coulent verticalement, vous le feriez comme ceci:

<androidx.constraintlayout.widget.ConstraintLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:ignore="MissingConstraints">

    <TextView
        Android:id="@+id/textView1"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:text="I am the first TextView" />

    <TextView
        Android:id="@+id/textView2"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:text="I am the second TextView" />

    <TextView
        Android:id="@+id/textView3"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:text="I am the third TextView" />

    <androidx.constraintlayout.helper.widget.Flow
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        app:constraint_referenced_ids="textView1,textView2,textView3"
        app:flow_horizontalAlign="start"
        app:flow_horizontalStyle="packed"
        app:flow_maxElementsWrap="1"
        app:flow_verticalAlign="top"
        app:flow_verticalStyle="packed"
        app:flow_wrapMode="chain"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Vous pouvez jouer avec le app:flow_ attributs dans l'élément Flow pour obtenir un comportement de flux différent. Pour plus d'informations sur l'élément Flow, reportez-vous aux notes de publication ici .

1
Adil Hussain