Ajouter et gérer des actions

La barre d'application vous permet d'ajouter des boutons pour les actions des utilisateurs. Cette fonctionnalité vous permet de placer 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 boutons Partager et Créer un album en haut lorsque l'utilisateur regarde sa photo. Lorsque l'utilisateur regarde une photo individuelle, l'application peut afficher les boutons Recadrage et Filtrer.

L'espace dans la barre d'application est limité. Si une application déclare plus d'actions que ne peut en contenir la barre d'application, celle-ci envoie les actions en trop vers un menu à développer. L'application peut également spécifier qu'une action doit toujours s'afficher dans le menu à développer, plutôt que dans la barre d'application.

Image montrant l'application Now in Android avec une icône de barre d'action
Image 1. Une icône d'action dans l'application Now in Android

Ajouter des boutons d'action

Tous les boutons d'action et les autres éléments disponibles dans le dépassement d'action sont définis dans une ressource de menu XML. Pour ajouter des actions à la barre d'action, créez un fichier XML dans le répertoire res/menu/ de votre projet.

Ajoutez un élément <item> pour chaque élément que vous souhaitez inclure dans la barre d'action, comme indiqué dans 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 s'affiche sous la forme d'un bouton dans la barre d'application. Si vous définissez app:showAsAction="ifRoom" (comme dans l'action favorite dans l'exemple de code), l'action s'affiche sous forme de bouton s'il y a de l'espace dans la barre d'application. Si l'espace est insuffisant, les actions en trop 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 menu à développer et non affichée dans la barre d'application.

Le système utilise l'icône d'action comme bouton d'action si l'action 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 la méthode de rappel onOptionsItemSelected() de votre activité et transmet un objet MenuItem pour indiquer l'élément sur lequel l'utilisateur a appuyé. Dans votre implémentation de onOptionsItemSelected(), appelez la méthode MenuItem.getItemId() pour déterminer l'élément sur lequel l'utilisateur a appuyé. L'ID renvoyé correspond à la valeur que vous déclarez dans l'attribut android:id de l'élément <item> correspondant.

Par exemple, l'extrait de code suivant vérifie quelle action l'utilisateur sélectionne. Si la méthode ne reconnaît pas l'action de l'utilisateur, elle appelle la méthode de super-classe:

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);

    }
}