Aggiungi e gestisci azioni

Prova Compose
Jetpack Compose è il toolkit per la UI consigliato per Android. Scopri come aggiungere componenti in Compose.

La barra delle app ti consente di aggiungere pulsanti per le azioni utente. Questa funzionalità ti consente di inserire le azioni più importanti per il contesto attuale nella parte superiore dell'app. Ad esempio, un'app di navigazione tra le foto potrebbe mostrare i pulsanti Condividi e Crea album nella parte superiore quando l'utente sta guardando il rullino fotografico. Quando l'utente guarda una singola foto, l'app potrebbe mostrare i pulsanti Ritaglia e Filtra.

Lo spazio nella barra delle app è limitato. Se un'app dichiara più azioni di quelle che possono essere visualizzate nella barra delle app, la barra delle app invia le azioni in eccesso a un menu overflow. L'app può anche specificare che un'azione venga sempre visualizzata nel menu overflow, anziché nella barra delle app.

Un'immagine che mostra l'app Now in Android con un'icona della barra delle azioni
Figura 1. Un'icona di azione nell'app Now in Android.

Aggiungere pulsanti di azione

Tutti i pulsanti di azione e gli altri elementi disponibili nell'overflow delle azioni sono definiti in una risorsa di menu XML. Per aggiungere azioni alla barra delle azioni, crea un nuovo file XML nella directory res/menu/ del tuo progetto.

Aggiungi un elemento <item> per ogni elemento che vuoi includere nella barra delle azioni, come mostrato nel seguente file XML di esempio del menu:

<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'attributo app:showAsAction specifica se l'azione viene visualizzata come pulsante nella barra delle app. Se imposti app:showAsAction="ifRoom", come nell'azione favorite del codice di esempio, l'azione viene visualizzata come pulsante se c'è spazio nella barra delle app. Se non c'è spazio sufficiente, le azioni in eccesso vengono inviate al menu extra. Se imposti app:showAsAction="never", come nell'azione settings del codice di esempio, l'azione viene sempre elencata nel menu extra e non visualizzata nella barra delle app.

Il sistema utilizza l'icona dell'azione come pulsante di azione se l'azione viene visualizzata nella barra delle app. Puoi trovare molte icone utili in Material Icons.

Rispondere alle azioni

Quando l'utente seleziona uno degli elementi della barra delle app, il sistema chiama il metodo di callback onOptionsItemSelected() dell'attività e passa un oggetto MenuItem per indicare quale elemento è stato toccato. Nell'implementazione di onOptionsItemSelected(), chiama il metodo MenuItem.getItemId() per determinare quale elemento è stato toccato. L'ID restituito corrisponde al valore dichiarato nell'attributo android:id dell'elemento <item> corrispondente.

Ad esempio, il seguente snippet di codice controlla l'azione selezionata dall'utente. Se il metodo non riconosce l'azione dell'utente, richiama il metodo della 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);

    }
}