Que faut-il implémenter: ConstraintLayout
ou CoordinatorLayout
pour une conception appropriée du matériel dans Android??
Coordinator Coordinator Layout est destiné à être la présentation de niveau supérieur permettant à l’activité de gérer les comportements p. Ex. interactions et animations.
L'objectif principal de ConstraintLayout est de fournir un moyen pratique de créer une mise en page à plat avec plusieurs enfants (RelativeLayout beaucoup plus puissant).
Ainsi, CoordinatorLayout doit gérer le comportement complexe (en particulier les animations) des composants de votre activité, et ConstraintLayout pour le placement correct des composants (en particulier les éléments de liste).
Coordinator Coordinator est un FrameLayout super puissant.
CoordinatorLayout est destiné à deux cas d'utilisation principaux:
Par défaut, si vous ajoutez plusieurs enfants à un FrameLayout, ils se chevaucheront. Un FrameLayout doit être utilisé le plus souvent pour gérer une seule vue enfant. Le principal attrait de CoordinatorLayout est sa capacité à coordonner les animations et les transitions des vues qu’il contient. En spécifiant Behaviors pour les vues enfant d'un CoordinatorLayout, vous pouvez fournir de nombreuses interactions différentes au sein d'un seul parent et ces vues peuvent également interagir les unes avec les autres. Les classes d'affichage peuvent spécifier un comportement par défaut lorsqu'elles sont utilisées en tant qu'enfant d'un CoordinatorLayout à l'aide de l'annotation CoordinatorLayout.DefaultBehavior.
Les comportements peuvent être utilisés pour implémenter une variété d'interactions et de modifications de disposition supplémentaires, allant des tiroirs et panneaux coulissants aux éléments et boutons pouvant être balayés par balayage qui se collent à d'autres éléments lorsqu'ils se déplacent et s'animent.
ConstraintLayout vous permet de créer des présentations larges et complexes avec une hiérarchie de vues à plat (pas de groupes de vues imbriquées). Il ressemble à RelativeLayout en ce sens que toutes les vues sont agencées en fonction des relations entre les vues frères et la présentation parent, mais elles sont plus flexibles que RelativeLayout et plus faciles à utiliser. avec Android Editeur de disposition de Studio.
Il existe actuellement différents types de contraintes que vous pouvez utiliser:
Que faut-il mettre en œuvre ConstraintLayout ou CoordinatorLayout pour une conception appropriée du matériel dans Android?
Vous devrez peut-être utiliser ConstraintLayout et CoordinatorLayout pour créer des animations d'interface utilisateur et de matériel efficaces.
Un exemple courant qui utilise à la fois CoordinatorLayout et ConstraintLayout est donné ci-dessous pour référence.
Utilisez Coordinatorlayout comme décor d'application de niveau supérieur. Il sera généralement utilisé pour mettre en forme AppBarLayout, FloatingActionButton et le corps principal de votre écran, par exemple NestedScrollView. Dans NestedScrollView, utilisez ConstraintLayout pour décrire le reste de la présentation sous forme de hiérarchie à plat.
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<androidx.core.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- Your scrolling content -->
<androidx.constraintlayout.widget.ConstraintLayout
...>
<!-- body of constraint layout -->
<Button Android:id="@+id/button" ...
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<com.google.Android.material.appbar.AppBarLayout
Android:layout_height="wrap_content"
Android:layout_width="match_parent">
<androidx.appcompat.widget.Toolbar
...
app:layout_scrollFlags="scroll|enterAlways"/>
<com.google.Android.material.tabs.TabLayout
...
app:layout_scrollFlags="scroll|enterAlways"/>
</com.google.Android.material.appbar.AppBarLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Point bonus
Vous pouvez utiliser le puissant MotionLayout qui est une sous-classe de ConstraintLayout pour la création d'animations. Vous pouvez vérifier ceci pour un exemple détaillé pour une animation personnalisée utilisant MotionLayout.
Il semble que vous utilisiez (presque) toujours un CoordinatorLayout
et parfois un ConstraintLayout
à l'intérieur. Voir les ressources suivantes
Le codelab à l'adresse https://codelabs.developers.google.com/codelabs/material-design-style/index.html# utilise uniquement un CoordinatorLayout
L'exemple d'application Android-sunflower ("illustrating Android meilleures pratiques de développement") "n'utilise ni l'un ni l'autre pour l'activité de niveau supérieur, mais utilise les deux à l'intérieur de son fragment_plant_detail.xml
, le ConstraintLayout
étant à l'intérieur du CoordinatorLayout
:
<layout ...>
<data .../>
<Android.support.design.widget.CoordinatorLayout ...>
<Android.support.design.widget.AppBarLayout ...>
<Android.support.design.widget.CollapsingToolbarLayout ...>
<ImageView... />
<Android.support.v7.widget.Toolbar... />
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.widget.NestedScrollView ...>
<Android.support.constraint.ConstraintLayout ...>
<TextView.../>
<TextView... />
</Android.support.constraint.ConstraintLayout>
</Android.support.v4.widget.NestedScrollView>
<Android.support.design.widget.FloatingActionButton ... />
</Android.support.design.widget.CoordinatorLayout>
</layout>