La barra delle app ti consente di aggiungere pulsanti per le azioni utente. Questa funzionalità ti consente di mettere le azioni più importanti per il contesto corrente nella parte superiore dell'app. Ad esempio, un'app di visualizzazione di foto potrebbe mostrare i pulsanti Condividi e Crea album in alto quando l'utente sta guardando il suo album fotografico. Quando l'utente guarda una singola foto, l'app potrebbe mostrare i pulsanti Ritaglia e Filtro.
Lo spazio nella barra delle app è limitato. Se un'app dichiara più azioni di quante ne possano 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 extra, anziché nella barra delle app.
![Un'immagine che mostra l'app Ora su Android con un'icona della barra delle azioni](https://developer.android.com/static/images/ui/notifications/actions_actionbar.png?authuser=0000&hl=it)
Aggiungere pulsanti di azione
Tutti i pulsanti di azione e gli altri elementi disponibili nell'overflow di azioni sono definiti in una risorsa menu XML. Per aggiungere azioni alla barra delle azioni, crea un nuovo file XML nella directory res/menu/
del progetto.
Aggiungi un elemento
<item>
per ogni elemento che vuoi includere nella barra delle azioni, come mostrato nel
seguente file XML di menu di esempio:
<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 preferita del codice di esempio, l'azione viene visualizzata come pulsante se c'è spazio nella barra delle app. Se lo spazio non è sufficiente, le azioni in eccesso vengono inviate al menu overflow. 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 dell'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 callback onOptionsItemSelected()
della tua 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 quale azione seleziona l'utente. Se il metodo non riconosce l'azione dell'utente, invoca 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); } }