Dans ce tutoriel, nous discuterons des subtilités de android ConstraintLayout. Google avait introduit l’éditeur de disposition de contrainte Android lors de la conférence Google I/O 2016. Le nouveau Layout Editor dispose d’un ensemble d’outils puissants permettant aux développeurs de créer des hiérarchies d’interfaces utilisateur plates pour leurs mises en page complexes.
Android ConstraintLayout
Pour utiliser ConstraintLayout sur Android, assurez-vous d’utiliser la dernière version d’Android Studio. Idéalement, Android Studio 2.2 et supérieur. Nous devons télécharger les outils SDK nécessaires pour ConstraintLayout depuis le Gestionnaire SDK. Créez un nouveau projet d’activité vide et ajoutez la dépendance suivante dans le fichier build.gradle.
compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4'
Créez une nouvelle mise en page avec la classe racine définie sur ConstraintLayout comme indiqué dans l’image ci-dessous. Pour convertir une ancienne mise en page en ConstraintLayout, ouvrez le volet de conception de la mise en page respective, faites un clic droit sur le composant racine et choisissez l’option pertinente comme indiqué dans l’image ci-dessous.
Aperçu du Constraint Layout Android
Le ConstraintLayout d’Android est utilisé pour définir une mise en page en attribuant des contraintes à chaque vue/widget enfant par rapport aux autres vues présentes. Un ConstraintLayout est similaire à un RelativeLayout, mais avec plus de puissance. L’objectif du ConstraintLayout est d’améliorer les performances des applications en supprimant les vues imbriquées avec une conception plate et flexible. Une vue à l’intérieur du ConstraintLayout a des poignées (ou points d’ancrage) de chaque côté qui sont utilisées pour attribuer les contraintes. Prenons un TextView et faisons-le glisser et déposer sur la mise en page et attribuons-lui les contraintes. Le TextView ci-dessus a trois types de poignées :
poignée de redimensionnement – Elle est présente sur les quatre coins et est utilisée pour redimensionner la vue, tout en maintenant ses contraintes intactes. Poignée latérale – C’est la poignée circulaire présente au centre de chaque côté. Elle est utilisée pour définir les contraintes supérieures, gauches, inférieures et droites de la vue. Poignée de ligne de base – Elle est utilisée pour aligner la ligne de base avec un autre TextView dans la mise en page.
Attribuons les contraintes sur le TextView et examinons le code xml de celui-ci. Remarquez le volet inspecteur des propriétés sur le côté droit :
Il affiche les marges définies pour chaque côté de la vue. Il permet également de modifier la taille de la vue en basculant entre les modes suivants :
- Contenu d’enveloppe – Cela enveloppe la vue pour remplir son contenu.
- Taille quelconque – C’est similaire à parent correspondant.
- Taille fixe – Cela nous permet de définir une largeur et une hauteur constantes.
Le code xml pour la disposition ci-dessus ressemble à : sample.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginLeft="16dp"
android:layout_marginEnd="16dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginRight="16dp" />
</android.support.constraint.ConstraintLayout>
app:layout_constraintLeft_toLeftOf="parent"
– constraintLeft est le point d’ancrage à gauche de la vue. toLeftOf signifie aligner la vue à gauche de la vue assignée qui est « parent » dans ce cas.
Lorsque les positions absolues sont définies sur la vue, les propriétés XML utilisées sont –
tools:layout_editor_absoluteY="48dp"
tools:layout_editor_absoluteX="40dp"
Ajoutons un autre TextView et alignons leurs lignes de base. Le code XML pour la disposition ci-dessus est :
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:layout_marginStart="16dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="16dp"
android:layout_marginEnd="16dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView2"
app:layout_constraintBaseline_toBaselineOf="@+id/textView"
android:layout_marginStart="16dp"
app:layout_constraintLeft_toLeftOf="parent"
android:layout_marginLeft="16dp"
app:layout_constraintRight_toLeftOf="@+id/textView"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp" />
</android.support.constraint.ConstraintLayout>
Il existe deux autres outils, Auto-connect et Inference, utilisés pour créer automatiquement des contraintes.
- Auto-Connect – Cette fonctionnalité peut être activée en cliquant sur :
Comme son nom l’indique, Auto-connect crée automatiquement des contraintes entre deux vues voisines
- Inference – Cette fonctionnalité est activée en cliquant sur :
Le moteur d’inférence crée des contraintes parmi tous les éléments d’une mise en page. Le moteur d’inférence essaie de trouver et de créer des connexions optimales en fonction de divers facteurs tels que les positions des widgets et leur taille.
A demo of Auto-Connect layout is given below: As you can see in the above gif, The constraints are animated automatically. Notice the horizontal and vertical sliders in the properties pane. They are called horizontal and vertical bias respectively. They allow us to position a view along the horizontal or vertical axis using a bias value, this will be relative to it’s constrained position. The xml code for the above demo is given below:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/ic_launcher"
android:id="@+id/imageView7"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.58000004"
app:layout_constraintHorizontal_bias="0.47" />
</android.support.constraint.ConstraintLayout>
La démo d’une mise en page avec l’inférence activée est donnée ci-dessous:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView22"
tools:layout_constraintRight_creator="1"
tools:layout_constraintBottom_creator="1"
app:layout_constraintBottom_toTopOf="@+id/button2"
app:layout_constraintRight_toRightOf="parent"
tools:layout_constraintLeft_creator="1"
android:layout_marginBottom="59dp"
app:layout_constraintLeft_toLeftOf="parent" />
<Button
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button2"
tools:layout_constraintTop_creator="1"
tools:layout_constraintRight_creator="1"
android:layout_marginEnd="31dp"
app:layout_constraintRight_toRightOf="@+id/textView22"
android:layout_marginTop="178dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginRight="31dp" />
</android.support.constraint.ConstraintLayout>
tools:layout_constraintTop_creator="1"
: Les attributs de créateur permettent de suivre qui a créé les contraintes, en particulier si elles sont créées par le moteur d’inférence, elles sont attribuées comme 1.
Suppression des contraintes
Pour supprimer une contrainte individuelle, survolez la poignée circulaire et cliquez dessus lorsqu’elle devient rouge. Pour supprimer toutes les contraintes d’une vue, cliquez sur le symbole en dessous qui ressemble à: Un exemple de démo gif est donné ci-dessous:
Cela marque la fin de ce tutoriel. N’hésitez pas à essayer de remplacer certaines de vos propres mises en page par une mise en page de contrainte.
Source:
https://www.digitalocean.com/community/tutorials/android-constraintlayout