Ajouter et gérer des actions

Essayer Compose
Jetpack Compose est le kit d'outils d'interface utilisateur recommandé pour Android. Découvrez comment ajouter des composants dans Compose.

La barre d'application vous permet d'ajouter des boutons pour les actions de l'utilisateur. 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 photo peut afficher les boutons Partager et Créer un album en haut lorsque l'utilisateur consulte sa pellicule. Lorsque l'utilisateur regarde une photo individuelle, l'application peut afficher les boutons Rogner 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, elle envoie les actions supplémentaires à 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.

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

Ajouter des boutons d'action

Tous les boutons d'action et autres éléments disponibles dans le menu à développer 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 <item> élément pour chaque élément que vous souhaitez inclure dans la barre d'action, comme illustré 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 spécifie si l'action s'affiche sous forme de bouton dans la barre d'application. Si vous définissez app:showAsAction="ifRoom" (comme dans l'action favorite de l'exemple de code), l'action s'affiche sous forme de bouton s'il y a de la place dans la barre d'application. S'il n'y a pas assez de place, les actions supplémentaires sont envoyées au menu à développer. Si vous définissez app:showAsAction="never" (comme dans l'action settings de l'exemple de code), l'action est toujours listée dans le menu à développer et ne s'affiche pas dans la barre d'application.

Le système utilise l'icône de l'action comme bouton d'action si l'action s'affiche dans la barre d'application. Vous trouverez de nombreuses icônes utiles dans Material Icons.

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 l'action que l'utilisateur sélectionne. Si la méthode ne reconnaît pas l'action de l'utilisateur, elle appelle la méthode de la superclasse :

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

    }
}