Vous pouvez utiliser un Snackbar pour afficher un bref message à l'utilisateur. Contrairement aux notifications, le message disparaît automatiquement après une courte période. Un Snackbar est idéal pour les messages brefs qui ne nécessitent aucune action de la part de l'utilisateur. Par exemple, une application de messagerie peut utiliser un Snackbar pour indiquer à l'utilisateur que l'application a bien envoyé un e-mail.
Utiliser un CoordinatorLayout
Un Snackbar est associé à une vue. Snackbar fournit des fonctionnalités de base s'il est associé à un objet dérivé de la classe View, tel que l'un des objets de mise en page courants. Toutefois, si le Snackbar est
associé à un
CoordinatorLayout,
il Snackbarbénéficie de fonctionnalités supplémentaires :
- L'utilisateur peut ignorer le
Snackbaren le balayant. - La mise en page déplace les autres éléments d'UI lorsque le
Snackbarapparaît. Par exemple, si la mise en page comporte unFloatingActionButton, la mise en page déplace le bouton vers le haut lorsqu'elle affiche unSnackbar, au lieu de dessiner leSnackbarau-dessus du bouton. La figure 1 illustre ce processus.
La classe CoordinatorLayout fournit un sur-ensemble des fonctionnalités de FrameLayout.
Si votre application utilise déjà un FrameLayout, vous pouvez remplacer cette mise en page par un CoordinatorLayout pour activer toutes les fonctionnalités de Snackbar. Si votre application utilise d'autres objets de mise en page, encapsulez vos éléments de mise en page existants dans un CoordinatorLayout, comme illustré dans l'exemple suivant :
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/myCoordinatorLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Here are the existing layout elements, now wrapped in a CoordinatorLayout. --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- ...Toolbar, other layouts, other elements... --> </LinearLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
Définissez un tag android:id pour votre CoordinatorLayout.
Vous avez besoin de l'ID de la mise en page lorsque vous affichez le message.
Figure 1. Le CoordinatorLayout déplace le FloatingActionButton vers le haut lorsque le Snackbar apparaît.
Afficher un message
Pour afficher un message, vous devez suivre deux étapes. Commencez par créer un objet Snackbar avec le texte du message. Vous appelez ensuite la méthode show() de cet objet pour afficher le message à l'utilisateur.
Créer un objet Snackbar
Créez un objet Snackbar en appelant la méthode statique Snackbar.make(). Lorsque vous créez le Snackbar, spécifiez le message qu'il affiche et la durée pendant laquelle il doit s'afficher :
val mySnackbar = Snackbar.make(view, stringId, duration)
- afficher
-
Vue à laquelle associer le
Snackbar. La méthode recherche dans la hiérarchie des vues à partir de la vue transmise jusqu'à ce qu'elle atteigne unCoordinatorLayoutou la vue de contenu de la décoration de la fenêtre. En règle générale, il est plus simple de transmettre leCoordinatorLayoutqui entoure votre contenu. - stringId
- ID de ressource du message que vous souhaitez afficher. Il peut s'agir de texte mis en forme ou non.
- duration
-
Durée d'affichage du message. Peut être défini sur
LENGTH_SHORTouLENGTH_LONG.
Afficher le message à l'utilisateur
Après avoir créé le Snackbar, appelez sa méthode show()
pour l'afficher Snackbar à l'utilisateur :
mySnackbar.show()
Le système n'affiche pas plusieurs objets Snackbar en même temps. Par conséquent, si la vue affiche actuellement un autre Snackbar, le système met votre Snackbar en file d'attente et l'affiche une fois que le Snackbar actuel a expiré ou a été fermé.
Si vous souhaitez afficher un message à l'utilisateur et que vous n'avez pas besoin d'appeler l'une des méthodes utilitaires de l'objet Snackbar, vous n'avez pas besoin de conserver la référence à Snackbar après avoir appelé show(). Pour cette raison, il est courant d'utiliser l'enchaînement de méthodes pour créer et afficher un Snackbar dans une seule instruction :
Snackbar.make( findViewById(R.id.myCoordinatorLayout), R.string.email_sent, Snackbar.LENGTH_SHORT ).show()