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