Ajouter et gérer des actions

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

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 dans les photos peut afficher les boutons Partager et Créer un album en haut de l'écran lorsque l'utilisateur consulte son flux de photos. Lorsque l'utilisateur regarde une photo individuelle, l'application peut afficher les boutons Recadrer et Filtrer.

L'espace dans la barre d'application est limité. Si une application déclare plus d'actions que la barre d'application ne peut en contenir, la barre d'application envoie les actions excédentaires à 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 "En ce moment sur Android".

Ajouter des boutons d'action

Tous les boutons d'action et autres éléments disponibles dans le menu déroulant 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 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 Favoris 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. 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 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 les 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 sélectionné. 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 sélectionnée par l'utilisateur. Si la méthode ne reconnaît pas l'action de l'utilisateur, elle appelle la méthode de la 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);

    }
}