La barre d'application vous permet d'ajouter des boutons d'action utilisateur. Cette fonctionnalité vous permet de mettre Les actions les plus importantes pour le contexte actuel en haut de l'application Par exemple, une application de navigation de photos peut afficher les options Partager et Créer album en haut lorsque l'utilisateur consulte sa pellicule. Quand ? l'utilisateur regarde une photo individuelle, l'application peut afficher la fonction Recadrer et Filtrer.
L'espace dans la barre d'application est limité. Si une application déclare plus d'actions que nécessaire Dans la barre d'application, la barre d'application envoie les actions en excès dans un menu à développer. L'application peut également spécifier qu'une action s'affiche toujours dans le menu à développer, au lieu de s'afficher dans la barre d'application.
Ajouter des boutons d'action
Tous les boutons d'action et autres éléments disponibles dans le menu à développer
défini dans un fichier XML
ressource de menu. Pour ajouter
à la barre d'action, créez un fichier XML dans le fichier
Répertoire res/menu/
.
Ajoutez un
<item>
pour chaque élément que vous souhaitez inclure dans la barre d'action, comme indiqué dans les
Voici l'exemple de fichier XML de menu suivant:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!-- "Mark Favorite", must appear as action button if possible. --> <item android:id="@+id/action_favorite" android:icon="@drawable/ic_favorite_black_48dp" android:title="@string/action_favorite" app:showAsAction="ifRoom"/> <!-- Settings, must always be in the overflow. --> <item android:id="@+id/action_settings" android:title="@string/action_settings" app:showAsAction="never"/> </menu>
L'attribut app:showAsAction
indique si l'action est
affiché sous la forme d'un bouton
dans la barre d'application. Si vous définissez
app:showAsAction="ifRoom"
, comme dans l'exemple de code
action favori : l'action s'affiche sous la forme d'un bouton s'il y a de la place dans
la barre d’application. Si l'espace est insuffisant, les actions excédentaires sont envoyées
dans le menu à développer. Si vous définissez app:showAsAction="never"
, comme dans
l'action settings de l'exemple de code : l'action est toujours répertoriée dans le
et n'est pas affichée dans la barre d'application.
Le système utilise l'icône de l'action comme bouton d'action si celle-ci s'affiche dans la barre d'application. Vous trouverez de nombreuses icônes utiles dans Icônes Material.
Répondre aux actions
Lorsque l'utilisateur sélectionne l'un des éléments de la barre d'application, le système appelle votre
activité
onOptionsItemSelected()
de rappel et transmet un
Objet MenuItem
pour indiquer l'élément sur lequel l'utilisateur a appuyé. Lors de la mise en œuvre
onOptionsItemSelected()
, appelez la méthode
MenuItem.getItemId()
pour identifier l'élément sur lequel l'utilisateur a appuyé. L'ID renvoyé correspond à la valeur que vous
déclarer dans l'élément <item>
correspondant
android:id
.
Par exemple, l'extrait de code suivant permet de vérifier l'action sélectionnée par l'utilisateur. Si la méthode ne reconnaît pas l'action de l'utilisateur, elle appelle la super-classe. méthode:
Kotlin
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.action_settings -> { // User chooses the "Settings" item. Show the app settings UI. true } R.id.action_favorite -> { // User chooses the "Favorite" action. Mark the current item as a // favorite. true } else -> { // The user's action isn't recognized. // Invoke the superclass to handle it. super.onOptionsItemSelected(item) } }
Java
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: // User chooses the "Settings" item. Show the app settings UI. return true; case R.id.action_favorite: // User chooses the "Favorite" action. Mark the current item as a // favorite. return true; default: // The user's action isn't recognized. // Invoke the superclass to handle it. return super.onOptionsItemSelected(item); } }