La raccoltaToolbar
della libreria AndroidX offre diversi modi per consentire agli utenti di interagire con la tua app.
Aggiungere e gestire le azioni descrive come
definire un'azione, che può essere un pulsante o un elemento di menu. Questo documento descrive come aggiungere
due componenti versatili:
- Una visualizzazione di azioni è un'azione che offre 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 provider di azioni è un'azione con un layout personalizzato. L'azione inizialmente viene visualizzata come pulsante o elemento di menu. Quando l'utente tocca l'azione, il provider dell'azione controlla il comportamento dell'azione nel modo da te definito. Ad esempio, il fornitore di azioni potrebbe rispondere a un tap visualizzando un menu.
AndroidX fornisce diversi widget specializzati per visualizzazioni di azioni e provider di azioni. Ad esempio, il
SearchView
widget
implementa una visualizzazione di azioni per l'inserimento di query di ricerca. Il
ShareActionProvider
widget implementa un provider di azioni per la condivisione di informazioni con altre app. Puoi anche definire le tue visualizzazioni e i tuoi provider di azioni.
Aggiungere una visualizzazione di azioni
Per aggiungere una visualizzazione di azioni, crea un elemento <item>
nella risorsa 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 nella barra delle app, l'app lo mostra come icona. Se il widget si trova nel menu extra, l'app lo mostra come voce di menu. Quando l'utente interagisce con la visualizzazione delle azioni, questa si espande per riempire la barra delle 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 icona specificata da android:icon
. Se nella barra delle app non c'è spazio, l'app aggiunge l'azione al menu overflow.
Quando l'utente tocca l'icona o il 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 delle azioni
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 peronOptionsItemSelected()
espande la visualizzazione dell'azione. Se la sottoclasse dell'attività sostituisce il metodoonOptionsItemSelected()
, il metodo di override deve chiamaresuper.onOptionsItemSelected()
in modo che la superclasse possa espandere la visualizzazione dell'azione.
Se vuoi fare qualcosa quando l'azione è 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 di azioni sia espansa o chiusa. Il seguente snippet di codice mostra come definire e passare un ascoltatore:
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 provider di azioni, crea un elemento <item>
nella risorsa menu della barra degli strumenti, come descritto in Aggiungere e gestire le azioni. Aggiungi un attributo actionProviderClass
e impostalo sul nome di classe completo della classe del fornitore di azioni.
Ad esempio, il codice seguente dichiara un ShareActionProvider
, ovvero 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
ShareActionProvider
per un esempio di aggiunta di un'azione di condivisione alla barra delle app in alto. - Consulta
ActionProvider
per approfondire la creazione di un provider di azioni personalizzate.