La Toolbar
de la bibliothèque AndroidX offre aux utilisateurs différentes façons d'interagir avec votre application. 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 riches dans la barre d'application. Par exemple, une vue d'action de recherche permet à l'utilisateur de saisir son texte de recherche dans la barre d'application sans avoir à modifier les activités ou les fragments.
- Un fournisseur d'actions est une action avec sa propre mise en page personnalisée. L'action apparaît initialement sous la forme d'un bouton ou d'un élément de menu. Lorsque l'utilisateur appuie sur l'action, le fournisseur d'actions contrôle son comportement comme vous le définissez. Par exemple, le fournisseur d'actions peut répondre à un appui en affichant un menu.
AndroidX fournit plusieurs widgets de vue d'action et de fournisseur d'actions spécialisés. Par exemple, le widget SearchView
implémente une vue d'action pour saisir des requêtes de recherche. Le widget ShareActionProvider
implémente un fournisseur d'actions pour partager des informations avec d'autres applications. Vous pouvez également définir vos propres vues et fournisseurs d'actions.
Ajouter une vue d'action
Pour ajouter une vue d'action, créez un élément <item>
dans la ressource de menu de la barre d'outils, comme décrit dans la section Ajouter et gérer des actions. Ajoutez l'un des attributs suivants à l'élément <item>
:
actionViewClass
: classe d'un widget qui implémente l'actionactionLayout
: 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 l'affiche sous forme d'icône. Si le widget se trouve dans le menu à développer, l'application l'affiche en tant qu'élément de menu. Lorsque l'utilisateur interagit avec la vue d'action, elle 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 affiche le widget sous la forme de l'icône spécifiée par android:icon
. Si la barre d'application n'a pas assez d'espace, l'action est ajoutée au 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 lui permet d'interagir avec lui.
Si vous devez configurer l'action, faites-le dans le rappel onCreateOptionsMenu()
de votre activité. 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 d'objet pour le widget 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 d'action
Si l'élément <item>
de l'action comporte un indicateur collapseActionView
, l'application affiche la vue d'action sous forme d'icône jusqu'à ce que l'utilisateur interagisse avec elle. Lorsque l'utilisateur appuie sur l'icône, le gestionnaire intégré de onOptionsItemSelected()
développe la vue d'action. Si votre sous-classe d'activité remplace la méthode 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 implémente MenuItem.OnActionExpandListener
et transmettre un membre de cette classe à setOnActionExpandListener()
.
Par exemple, vous pouvez mettre à jour l'activité en fonction de l'état de développement ou de réduction d'une vue d'action. 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'actions
Pour déclarer un fournisseur d'actions, créez un élément <item>
dans la ressource de menu de la barre d'outils, comme décrit dans la section Ajouter et gérer des actions. Ajoutez un attribut actionProviderClass
et définissez-le sur le nom de classe complet de 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 n'est pas nécessaire de déclarer une icône pour le widget, car ShareActionProvider
fournit ses propres graphiques. Si vous utilisez une action personnalisée, déclarez une icône.
Ressources supplémentaires
- Consultez
ShareActionProvider
pour voir un exemple d'ajout d'une action de partage à votre barre d'application supérieure. - Pour en savoir plus sur la création d'un fournisseur d'actions personnalisé, consultez
ActionProvider
.