La bibliothèque AndroidX
Avantages de Toolbar
différentes façons pour les utilisateurs
d'interagir avec votre application.
La section Ajouter et gérer des actions explique comment
définir une action, qui peut être un bouton ou un élément de menu. Ce document explique comment ajouter
deux composants polyvalents:
- Une vue d'action est une action qui offre des fonctionnalités enrichies dans la barre d'application. Pour Par exemple, une vue d'action de recherche permet à l'utilisateur de saisir son texte de recherche dans la barre d'application sans avoir pour modifier des activités ou des fragments.
- Un fournisseur d'action est une action dotée de sa propre mise en page personnalisée. L'action initialement apparaît comme un bouton ou un élément de menu ; lorsque l'utilisateur appuie sur l'action, le fournisseur d'action contrôle le comportement de l'action comme vous le définissez. Par exemple, le fournisseur d'action peut répondre à une appuyer en affichant un menu.
AndroidX propose plusieurs widgets spécialisés dans les vues d'action et les fournisseurs d'actions. Par exemple,
Widget SearchView
met en œuvre une vue Action permettant de saisir des requêtes de recherche. La
ShareActionProvider
implémente un fournisseur d'actions pour le partage d'informations avec d'autres applications. Vous pouvez également définir
vos propres vues et
fournisseurs d'action.
Ajouter une vue "Action"
Pour ajouter une vue d'action, créez une
<item>
dans la ressource de menu de la barre d'outils, comme décrit dans
Ajouter et gérer des actions Ajoutez l'un des attributs suivants à la
Élément <item>
:
actionViewClass
: classe d'un widget qui implémente l'action.actionLayout
: ressource de mise en page décrivant les composants de l'action
Définissez l'attribut showAsAction
sur "ifRoom|collapseActionView"
ou
"never|collapseActionView"
L'indicateur collapseActionView
indique comment
afficher le widget lorsque l'utilisateur n'interagit pas avec lui. Si le widget se trouve dans la barre d'application, l'application
affiche le widget sous forme d'icône. Si le widget se trouve dans le menu à développer, l'application l'affiche
comme élément de menu. Lorsque l'utilisateur interagit avec la vue d'action, celle-ci se développe pour remplir la barre d'application.
Par exemple, le code suivant ajoute un widget SearchView
à la barre d'application:
<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" />
Si l'utilisateur n'interagit pas avec le widget, l'application l'affiche sous la forme d'une icône
d'ici le android:icon
. S'il n'y a pas de place dans la barre d'application, l'application ajoute l'action
dans le menu à développer.
Lorsque l'utilisateur appuie sur l'icône ou l'élément de menu, le widget se développe pour remplir la barre d'outils, ce qui permet au pour que l'utilisateur puisse interagir avec elle.
Si vous devez configurer l'action, faites-le dans le
onCreateOptionsMenu()
. Vous pouvez obtenir la référence d'objet de la vue d'action en appelant la méthode
getActionView()
. Par exemple, le code suivant récupère la référence de l'objet pour SearchView
défini dans l'exemple de code précédent:
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); }
Répondre à l'expansion de la vue "Action"
Si l'élément <item>
de l'action possède un indicateur collapseActionView
,
L'application affiche la vue d'action sous la forme d'une icône jusqu'à ce que l'utilisateur interagisse avec cette vue. Lorsque l'utilisateur
appuie sur l'icône, le gestionnaire intégré de
onOptionsItemSelected()
développe la vue des actions. Si votre sous-classe d'activité remplace
onOptionsItemSelected()
, votre méthode de remplacement doit appeler
super.onOptionsItemSelected()
pour que la super-classe puisse développer la vue d'action.
Si vous souhaitez effectuer une action lorsque l'action est développée ou réduite, vous pouvez définir une classe qui
implements
MenuItem.OnActionExpandListener
,
et transmettre un membre de cette classe
setOnActionExpandListener()
Par exemple, vous pouvez mettre à jour l'activité selon qu'une vue d'action est développée ou
réduit. L'extrait de code suivant montre comment définir et transmettre un écouteur:
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; }
Ajouter un fournisseur d'action
Pour déclarer un fournisseur d'action, créez un élément <item>
dans le menu de la barre d'outils
comme décrit dans la section Ajouter et gérer des actions. Ajoutez un
actionProviderClass
, puis définissez-le sur le nom de classe complet pour la classe
du fournisseur d'actions.
Par exemple, le code suivant déclare un ShareActionProvider
, qui est un widget
défini dans la bibliothèque AndroidX, qui permet à votre application de partager des données avec d'autres applications:
<item android:id="@+id/action_share" android:title="@string/share" app:showAsAction="ifRoom" app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
Dans ce cas, il est inutile de déclarer une icône pour le widget, car
ShareActionProvider
fournit ses propres graphiques. Si vous utilisez une action personnalisée,
déclarer une icône.
Ressources supplémentaires
- Voir
ShareActionProvider
pour voir un exemple d'ajout d'une action de partage à votre barre d'application supérieure. - Voir
ActionProvider
pour en savoir plus sur la création d'un fournisseur d'action personnalisée.