L'année dernière, Google a lancé Material Design et il est devenu évident que le mouvement et l'animation seraient deux des fonctionnalités les plus remarquables des applications Android modernes. Mais Google n'a pas fourni aux développeurs de solution facile pour les intégrer dans les applications. En conséquence, de nombreuses bibliothèques ont été développées pour résoudre le problème de l'intégration.
Au cours de cette année, cependant, lors de l'entrée / sortie de Google dans Google, Google a introduit la bibliothèque de support Android Design pour faciliter l'adoption de Material Design. Cela permet aux développeurs de se concentrer sur les fonctionnalités qui rendent leurs applications uniques..
Dans ce tutoriel, je vais vous montrer comment implémenter les techniques de défilement décrites dans les spécifications de Google Material Design. Avant de commencer, vous devez vous familiariser avec les régions à défilement disponibles dans une application Android. Dans l'image suivante, vous pouvez voir qu'il y a quatre régions.
C’est là que les notifications apparaissent et que l’état des différentes fonctionnalités de l’appareil s’affiche.
La barre d’outils était auparavant appelée barre d’action. C'est maintenant une vue plus personnalisable avec les mêmes fonctionnalités.
Cette région facultative est utilisée pour afficher les onglets qui catégorisent le contenu de votre application. Pour en savoir plus sur l'utilisation des onglets et sur les différentes manières de les afficher dans les spécifications de Google Material Design. Lorsque cela vous convient, vous pouvez également l'utiliser dans la navigation latérale de Google..
C’est ici que vous pouvez afficher des images ou des barres d’application étendues.
En ce qui concerne les techniques de défilement, ce sont la barre d’outils et la barre d’onglet / barre de recherche qui répondent lorsque le contenu de votre application défile.
Pour suivre, vous devriez utiliser la dernière version d'Android Studio. Vous pouvez l'obtenir sur le site Web Android Developer. Pour essayer ces techniques de défilement, je vous recommande de créer un nouveau projet (avec un niveau d'API minimum de 15), car la présentation de votre application changera de manière significative..
J'ai fourni un projet de démarrage que vous pouvez télécharger à partir de GitHub. Vous pouvez utiliser le projet de démarrage comme point de départ et utiliser les techniques de défilement dans vos propres applications. Ajoutons d’abord les dépendances suivantes à votre projet build.gradle fichier dans le dossier de l'application:
compiler 'com.android.support:design:22.2.0' compiler 'com.android.support:recyclerview-v7:22.2.0'
Avec la première dépendance, vous obtenez la bibliothèque de support Android Design, qui inclut les nouvelles classes dont nous avons besoin pour ce tutoriel..
Avec la deuxième dépendance, vous obtenez la dernière version de RecyclerVoir
. La version listée dans l'article officiel sur la création de listes ne sera pas utile cette fois.
Ensuite, vous allez avoir besoin de données factices pour essayer ces techniques et remplir le RecyclerVoir
. Vous pouvez les implémenter vous-même ou copier l’implémentation à partir du Activité initiale
classe dans le projet de démarrage.
Cette technique masque la zone de la barre d’outils lors du défilement du contenu de votre application. Vous pouvez voir la technique en action dans la vidéo suivante.
Pour cette mise en page, vous pouvez penser à quelque chose comme ceci:
Le problème avec cette disposition est que vous devez gérer les événements vous-même, mais ce sera sans douleur si vous tirez parti des nouvelles classes. Modifions le comme suit:
Dans cette nouvelle mise en page, vous pouvez voir que:
Disposition relative
est remplacé par un Coordonnateur
Barre d'outils
est enveloppé dans un AppBarLayout
Barre d'outils
et RecyclerVoir
reçu quelques attributs supplémentairesQuelles sont ces nouvelles classes?
Coordonnateur
Cette mise en page est un nouveau conteneur et un suralimenté FrameLayout
qui fournit un niveau supplémentaire de contrôle des événements tactiles entre les vues enfants.
AppBarLayout
Cette disposition est un autre nouveau conteneur, conçu spécifiquement pour implémenter un grand nombre des fonctionnalités du concept de barre d’application Material Design. Gardez à l'esprit que si vous l'utilisez dans un autre ViewGroup
, la plupart de ses fonctionnalités ne fonctionneront pas.
La clé de cette technique de défilement, et de la plupart des autres techniques de défilement dont nous allons parler, est la Coordonnateur
classe. Cette classe spéciale peut recevoir des événements depuis et transmettre des événements à ses vues enfant afin qu'elles répondent correctement. Il est conçu pour être utilisé comme vue conteneur racine..
Pour activer cette technique, le app: layout_behavior
attribut indique quelle vue déclenchera les événements dans le Barre d'outils
. Dans ce cas, c'est le RecyclerVoir
.
app: layout_behavior = “@ string / appbar_scrolling_view_behavior"
le app: layout_scrollFlags
attribut du Barre d'outils
indique à la vue comment réagir.
app: layout_scrollFlags = “scroll | enterAlways"
le app: layout_scrollFlags
attribut peut avoir quatre valeurs possibles, qui peuvent être combinées pour créer l’effet souhaité:
faire défiler
Cet indicateur doit être défini pour toutes les vues nécessitant un défilement hors écran. Les vues qui n'utilisent pas cet indicateur restent épinglées en haut de l'écran..
entrer toujours
Cet indicateur garantit que tout défilement vers le bas rendra cette vue visible, permettant ainsi au retour rapide modèle.
enterAlwaysCollapsed
Quand une vue a déclaré un minHeight
et si vous utilisez ce drapeau, la vue n’entre que dans sa hauteur minimale (réduite), ne s’agrandissant à sa hauteur maximale que lorsque la vue défilante a atteint son sommet..
exitUntilCollapsed
Cet indicateur provoque le défilement de la vue hors écran jusqu'à ce qu'elle soit réduite (son minHeight
est atteint) avant de quitter.
Vous pouvez maintenant exécuter le projet ou appuyer sur Contrôle + R, et voir cette technique en action.
Cette technique fait défiler la barre d'outils en dehors de l'écran tandis que la région de la barre d'onglets reste ancrée en haut. Vous pouvez voir cette technique en action dans la vidéo suivante.
Pour cette technique, je vais réutiliser la mise en page de la technique précédente et ajouter un TabLayout
vue à côté de la Barre d'outils
, à l'intérieur de AppBarLayout
.
le TabLayout
La vue fournit une disposition horizontale pour afficher les onglets. Vous pouvez ajouter un nombre quelconque d’onglets à l’aide des touches nouvel onglet
méthode et définir son mode de comportement en utilisant le setTabMode
. Commençons par remplir les onglets.
tab_layout = (TabLayout) findViewById (R.id.tabs); tab_layout.setTabMode (TabLayout.MODE_FIXED); tab_layout.addTab (tab_layout.newTab (). setText ("Onglet 1")); tab_layout.addTab (tab_layout.newTab (). setText ("Onglet 2")); tab_layout.addTab (tab_layout.newTab (). setText ("Onglet 3"));
En modifiant la valeur de la app: layout_scrollFlags
attribut, et l'ajout et la suppression de la Barre d'outils
et TabLayout
, vous pouvez obtenir des animations comme celles utilisées dans:
Regardez les vidéos suivantes pour des exemples de cette technique de défilement.
Vous pouvez exécuter votre projet et voir cette technique de défilement en action.
Pour cette technique de défilement, je vais utiliser la région d’espace flexible mentionnée au début de ce didacticiel. Je fais cela pour réduire la hauteur initiale du AppBarLayout
pendant que le contenu défile vers le haut. La hauteur de la AppBarLayout
augmente à sa hauteur d'origine à mesure que le contenu défile. Vous pouvez voir cette technique en action dans la vidéo suivante.
Pour cette technique de défilement, je vais utiliser la disposition suivante:
Cela ressemble certainement à beaucoup de code, alors décomposons-le. Dans cette mise en page, j'ai apporté les modifications suivantes:
Barre d'outils
est enveloppé dans un CollapsingToolBarLayout
et les deux éléments sont mis dans le AppBarLayout
.app: layout_scrollFlags
attribut est déplacé de la Barre d'outils
au CollapsingToolBarLayout
, parce que ce conteneur est maintenant en charge de répondre aux événements de défilement.app: layout_collapseMode
, a été ajouté à la Barre d'outils
. Cet attribut garantit que le Barre d'outils
reste épinglé en haut de l'écran.AppBarLayout
a une hauteur initiale fixe de 192dp.FloatingActionButton
a été ajouté à la mise en page, en dessous de la RecyclerVoir
.A quoi servent ces nouvelles classes?
CollapsingToolBarLayout
Ceci est une nouvelle vue, conçue spécifiquement pour emballer le Barre d'outils
et implémenter une barre d'application qui s'effondre. Lorsque vous utilisez le CollapsingToolBarLayout
classe, vous devez accorder une attention particulière aux attributs suivants:
application: contentScrim
Cet attribut spécifie la couleur à afficher quand il est complètement réduit.
app: ExpandedTitleMarginStart / App: ExpandTitleMarginEnd
Ces attributs spécifient les marges du titre développé. Ils sont utiles si vous envisagez d’utiliser le setDisplayHomeAsUpEnabled
méthode dans votre activité et remplissez les nouveaux espaces créés autour du titre.
FloatingActionButton
Le bouton d'action flottante est un composant important des applications Material Design. Vous pouvez maintenant inclure des boutons d'action flottants dans votre mise en page avec seulement quelques lignes de code. Vous pouvez utiliser le app: fabSize
attribut à choisir parmi deux tailles différentes, la norme (56dp) et mini (40dp). Standard est la taille par défaut.
L’effet de disparition est obtenu automatiquement en ancrant le bouton d’action flottante au AppBarLayout
en utilisant le app: layout_anchor
attribut. Vous pouvez également spécifier la position par rapport à cette ancre en utilisant le app: layout_anchorGravity
attribut.
Avant d'exécuter le projet, nous devons spécifier dans l'activité que le CollapsingToolBarLayout
va afficher le titre à la place du Barre d'outils
. Jetez un coup d'œil à l'extrait de code suivant pour plus de précisions..
collapsing_container = (CollapsingToolbarLayout) findViewById (R.id.collapsing_container); collapsing_container.setTitle (getResources (). getString (R.string.title_activity_technique3));
Exécutez le projet pour voir la troisième technique de défilement en action.
Cette technique de défilement utilise le mode étendu AppBarLayout
, montré dans la technique précédente, pour afficher une image. Vous pouvez voir cette technique dans la vidéo suivante.
Pour cette technique, je vais réutiliser la mise en page précédente et la modifier légèrement:
Dans cette mise en page, j'ai apporté les modifications suivantes:
Android: fond
attribut a été retiré de la AppBarLayout
. Parce que le ImageView
va remplir cet espace, il n'y a pas besoin d'avoir une couleur de fond.app: expandTitleMarginStart
et app: expandTitleMarginEnd
les attributs ont été supprimés, car nous n'utilisons pas le setDisplayHomeAsUpEnabled
méthode dans l'activité.ImageView
était ajouté avant la Barre d'outils
. Ceci est important pour éviter que le AppBarLayout
montre une partie de l'image à la place de la couleur primaire lorsqu'elle est réduite.Vous avez peut-être aussi remarqué que le ImageView
a la app: layout_collapseMode
attribut. La valeur de l'attribut est définie sur parallaxe
mettre en œuvre le défilement parallaxe. En outre, vous pouvez également ajouter le app: layout_collapseParallaxMultiplier
attribut pour définir un multiplicateur.
Ce sont tous les changements que vous devez faire pour que cette technique de défilement fonctionne correctement dans votre application. Exécutez le projet pour voir cette technique de défilement en action.
Pour cette technique de défilement, l’espace flexible est recouvert par le contenu de l’application et défile à l’écran lorsque le contenu défile. Vous pouvez voir cette technique en action dans la vidéo suivante.
Pour cette technique, vous pouvez réutiliser la mise en page de la technique précédente, avec quelques petites modifications..
Pour cette mise en page:
ImageView
et le FloatingActionButton
à l'intérieur de CollapsingToolbarLayout
ont été supprimés. Cette technique ne nécessite pas d'image.CollapsingToolbarLayout
, la application: contentScrim
attribut a été remplacé par le Android: fond
attribut. Nous faisons cela, car la couleur de fond doit correspondre à la couleur Barre d'outils
couleur de fond joliment disparue.Android: fond
attribut a été ajouté à la Barre d'outils
.app: behavior_overlapTop
attribut a été ajouté à la RecyclerVoir
. C'est l'attribut le plus important pour cette technique de défilement, car il spécifie le degré de chevauchement que la vue doit avoir avec le AppBarLayout
. Pour que cet attribut ait effet, il doit être ajouté à la même vue qui a app: layout_behavior
attribut.Si vous essayez d'utiliser cette technique de défilement avec ces modifications, la mise en page résultante n'aura pas de titre dans la liste. Barre d'outils
. Pour résoudre ce problème, vous pouvez créer un Affichage
et l'ajouter à la Barre d'outils
par programmation.
TextView text = new TextView (this); text.setText (R.string.title_activity_technique5); text.setTextAppearance (this, android.R.style.TextAppearance_Material_Widget_ActionBar_Title_Inverse); toolbar.addView (text);
Notez que vous n'avez pas besoin de mettre en œuvre chacune de ces techniques dans votre application. Certains seront plus utiles à votre conception que d'autres. Maintenant que vous savez comment les implémenter, vous pouvez les choisir et les expérimenter..
J'espère que vous avez trouvé ce tutoriel utile. N'oubliez pas de le partager si cela vous a plu. Vous pouvez laisser des commentaires et des questions ci-dessous.