La libreria AndroidX
Toolbar offre
diversi modi per gli utenti di interagire con la tua app.
Aggiungere e gestire azioni descrive come
definire un'azione, che può essere un pulsante o una voce di menu. Questo documento descrive come aggiungere
due componenti versatili:
- Una visualizzazione Azione è un'azione che fornisce funzionalità avanzate all'interno della barra delle app. Ad esempio, una visualizzazione dell'azione di ricerca consente all'utente di digitare il testo di ricerca nella barra delle app senza dover cambiare attività o frammenti.
- Un fornitore di azioni è un'azione con un proprio layout personalizzato. L'azione inizialmente viene visualizzata come pulsante o voce di menu; quando l'utente tocca l'azione, il fornitore dell'azione controlla il comportamento dell'azione nel modo che preferisci. Ad esempio, il fornitore di azioni potrebbe rispondere a un tocco visualizzando un menu.
AndroidX fornisce diversi widget specializzati per la visualizzazione delle azioni e per i provider di azioni. Ad esempio, il
widget SearchView
implementa una visualizzazione delle azioni per l'inserimento di query di ricerca. Il widget
ShareActionProvider
implementa un fornitore di azioni per la condivisione di informazioni con altre app. Puoi anche definire
le tue visualizzazioni delle azioni e i tuoi fornitori di azioni.
Aggiungere una visualizzazione delle azioni
Per aggiungere una visualizzazione delle azioni, crea un elemento
<item>
nella risorsa del menu della barra degli strumenti, come descritto in
Aggiungere e gestire le azioni. Aggiungi uno dei seguenti attributi all'elemento
<item>:
actionViewClass: la classe di un widget che implementa l'azioneactionLayout: una risorsa di layout che descrive i componenti dell'azione
Imposta l'attributo showAsAction su "ifRoom|collapseActionView" o
"never|collapseActionView". Il flag collapseActionView indica come
visualizzare il widget quando l'utente non interagisce con esso. Se il widget si trova sulla barra delle app, l'app
lo visualizza come icona. Se il widget si trova nel menu extra, l'app lo visualizza
come voce di menu. Quando l'utente interagisce con la visualizzazione dell'azione, questa si espande per riempire la barra dell'app.
Ad esempio, il seguente codice aggiunge un widget SearchView alla barra delle app:
<item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/ic_search" app:showAsAction="ifRoom|collapseActionView" app:actionViewClass="androidx.appcompat.widget.SearchView" />
Se l'utente non interagisce con il widget, l'app lo mostra come l'icona specificata da android:icon. Se non c'è spazio nella barra dell'app, l'app aggiunge l'azione al menu extra.
Quando l'utente tocca l'icona o la voce di menu, il widget si espande per riempire la barra degli strumenti, consentendo all'utente di interagire con esso.
Se devi configurare l'azione, fallo nel callback
onCreateOptionsMenu()
dell'attività. Puoi ottenere il riferimento all'oggetto della visualizzazione dell'azione chiamando il metodo
getActionView(). Ad esempio, il seguente codice recupera il riferimento all'oggetto per il widget SearchView
definito nell'esempio di codice precedente:
Kotlin
override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.main_activity_actions, menu) val searchItem = menu?.findItem(R.id.action_search) val searchView = searchItem?.actionView as SearchView // Configure the search info and add any event listeners. return super.onCreateOptionsMenu(menu) }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_activity_actions, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) searchItem.getActionView(); // Configure the search info and add any event listeners. return super.onCreateOptionsMenu(menu); }
Rispondere all'espansione della visualizzazione dell'azione
Se l'elemento <item> dell'azione ha un flag collapseActionView, l'app mostra la visualizzazione dell'azione come icona finché l'utente non interagisce con la visualizzazione dell'azione. Quando l'utente
tocca l'icona, il gestore integrato per
onOptionsItemSelected()
espande la visualizzazione dell'azione. Se la sottoclasse di attività esegue l'override del metodo
onOptionsItemSelected(), il metodo di override deve chiamare
super.onOptionsItemSelected() in modo che la superclasse possa espandere la visualizzazione dell'azione.
Se vuoi fare qualcosa quando l'azione viene espansa o compressa, puoi definire una classe che
implementa
MenuItem.OnActionExpandListener,
e passare un membro di quella classe a
setOnActionExpandListener().
Ad esempio, potresti voler aggiornare l'attività in base al fatto che una visualizzazione dell'azione sia espansa o
compressa. Il seguente snippet di codice mostra come definire e passare un listener:
Kotlin
override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.options, menu) // Define the listener. val expandListener = object : MenuItem.OnActionExpandListener { override fun onMenuItemActionCollapse(item: MenuItem): Boolean { // Do something when the action item collapses. return true // Return true to collapse the action view. } override fun onMenuItemActionExpand(item: MenuItem): Boolean { // Do something when it expands. return true // Return true to expand the action view. } } // Get the MenuItem for the action item. val actionMenuItem = menu?.findItem(R.id.myActionItem) // Assign the listener to that action item. actionMenuItem?.setOnActionExpandListener(expandListener) // For anything else you have to do when creating the options menu, // do the following: return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options, menu); // Define the listener. OnActionExpandListener expandListener = new OnActionExpandListener() { @Override public boolean onMenuItemActionCollapse(MenuItem item) { // Do something when the action item collapses. return true; // Return true to collapse action view. } @Override public boolean onMenuItemActionExpand(MenuItem item) { // Do something when it expands. return true; // Return true to expand the action view. } }; // Get the MenuItem for the action item. MenuItem actionMenuItem = menu.findItem(R.id.myActionItem); // Assign the listener to that action item. MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener); // For anything else you have to do when creating the options menu, // do the following: return true; }
Aggiungere un fornitore di azioni
Per dichiarare un fornitore di azioni, crea un elemento <item> nella risorsa del menu della barra degli strumenti, come descritto in Aggiungere e gestire le azioni. Aggiungi un
attributo actionProviderClass e impostalo sul nome della classe completo per la
classe del fornitore di azioni.
Ad esempio, il seguente codice dichiara un ShareActionProvider, che è un widget
definito nella libreria AndroidX che consente alla tua app di condividere dati con altre app:
<item android:id="@+id/action_share" android:title="@string/share" app:showAsAction="ifRoom" app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
In questo caso, non è necessario dichiarare un'icona per il widget, poiché
ShareActionProvider fornisce la propria grafica. Se utilizzi un'azione personalizzata,
dichiara un'icona.
Risorse aggiuntive
- Consulta
ShareActionProviderper un esempio di aggiunta di un'azione di condivisione alla barra dell'app in alto. - Consulta
ActionProviderper ulteriori informazioni sulla creazione di un fornitore di azioni personalizzato.