La libreria AndroidX
Toolbar
fornisce
modi diversi di interagire con la tua app da parte degli utenti.
Aggiungere e gestire le azioni descrive come
definisci un'azione, che può essere un pulsante o una voce di menu. Questo documento descrive come aggiungere
due componenti versatili:
- Una visualizzazione azioni è un'azione che offre funzionalità avanzate nella barra delle app. Per Ad esempio, la visualizzazione delle azioni di ricerca consente all'utente di digitare il testo di ricerca nella barra delle app senza dover di modificare attività o frammenti.
- Un fornitore di azioni è un'azione con un layout personalizzato. L'azione inizialmente appare come pulsante o voce di menu; Quando l'utente tocca l'azione, il fornitore di azioni controlla il comportamento dell'azione in qualsiasi modo tu definisci. Ad esempio, il provider di azioni potrebbe rispondere a una tocca mostrando un menu.
AndroidX offre diversi widget specializzati di visualizzazione delle azioni e provider di azioni. Ad esempio,
Widget SearchView
implementa una visualizzazione delle azioni per l'inserimento delle query di ricerca. La
ShareActionProvider
Il widget implementa un fornitore di azioni per la condivisione di informazioni con altre app. Puoi inoltre definire
le tue visualizzazioni di azioni e i tuoi fornitori di azioni.
Aggiungere una visualizzazione dell'azione
Per aggiungere una visualizzazione delle azioni, crea una
<item>
nella risorsa di menu della barra degli strumenti, come descritto in
Aggiungere e gestire le azioni. Aggiungi uno dei seguenti attributi alla sezione
<item>
elemento:
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"
oppure
"never|collapseActionView"
. Il flag collapseActionView
indica come
mostrare il widget quando l'utente non interagisce. Se il widget si trova sulla barra delle app,
visualizza il widget sotto forma di icona. Se il widget si trova nel menu extra, l'app lo visualizza.
come voce di menu. Quando l'utente interagisce con la visualizzazione delle azioni, questa si espande fino a 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 visualizza con l'icona specificata
entro il giorno android:icon
. Se non c'è spazio nella barra delle app, l'app aggiunge l'azione alla
menu extra.
Quando l'utente tocca l'icona o la voce di menu, il widget si espande fino a riempire la barra degli strumenti, consentendo l'interazione dell'utente con quest'ultima.
Se devi configurare l'azione, fallo nella
onCreateOptionsMenu()
di Google. Puoi ottenere il riferimento all'oggetto della visualizzazione azione chiamando il metodo
getActionView()
. Ad esempio, il seguente codice ottiene il riferimento all'oggetto per SearchView
widget 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 azione
Se l'elemento <item>
dell'azione ha un flag collapseActionView
, il valore
l'app mostra la visualizzazione delle azioni sotto forma di icona finché l'utente non interagisce con quest'ultima. Quando l'utente
tocca l'icona, il gestore integrato
onOptionsItemSelected()
espande la visualizzazione delle azioni. Se la sottoclasse dell'attività sostituisce la
onOptionsItemSelected()
, il metodo di override deve chiamare
super.onOptionsItemSelected()
in modo che la superclasse possa espandere la visualizzazione delle azioni.
Se vuoi eseguire un'azione quando l'azione è espansa o compressa, puoi definire una classe
implements
MenuItem.OnActionExpandListener
,
e passare un membro di quel corso
setOnActionExpandListener()
.
Ad esempio, potresti voler aggiornare l'attività a seconda che la visualizzazione delle azioni sia espansa o meno
compressi. 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; }
Aggiungi un fornitore di azioni
Per dichiarare un fornitore di azioni, crea un elemento <item>
nel menu della barra degli strumenti
risorsa, come descritto in Aggiungere e gestire azioni. Aggiungi un
actionProviderClass
e impostalo sul nome completo della classe per l'attributo
della classe del provider di azioni.
Ad esempio, il seguente codice dichiara un ShareActionProvider
, che è un widget
definiti nella raccolta 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,
dichiarare un'icona.
Risorse aggiuntive
- Consulta
ShareActionProvider
per vedere un esempio di aggiunta di un'azione di condivisione alla barra delle app in alto. - Consulta
ActionProvider
per scopri di più sulla creazione di un provider di azioni personalizzate.