La biblioteca de AndroidX
Toolbar
proporciona
diferentes formas para que los usuarios interactúen con tu app.
En Cómo agregar y manejar acciones, se describe cómo
definir una acción, que puede ser un botón o un elemento de menú. En este documento, se describe cómo agregar
dos componentes versátiles:
- Una vista de acción es una acción que proporciona una funcionalidad enriquecida dentro de la barra de la app. Para ejemplo, una vista de acción de búsqueda le permite al usuario escribir el texto de búsqueda en la barra de la aplicación sin que para cambiar actividades o fragmentos.
- Un proveedor de acciones es una acción con su propio diseño personalizado. La acción inicial aparece como un botón o como un elemento de menú; Cuando el usuario presiona la acción, el proveedor de acciones controla el comportamiento de la acción de la forma que definas. Por ejemplo, el proveedor de acciones podría responder a un toca mostrando un menú.
AndroidX proporciona varias vistas de acción especializadas y widgets de proveedor de acciones. Por ejemplo, el
Widget SearchView
Implementar una vista de acción para ingresar búsquedas El
ShareActionProvider
implementa un proveedor de acciones para compartir información con otras apps. También puedes definir
tus propias vistas y proveedores de acciones.
Cómo agregar una vista de acción
Para agregar una vista de acción, crea una
<item>
en el recurso de menú de la barra de herramientas, como se describe en
Agrega y controla acciones. Agrega uno de los siguientes atributos al
Elemento <item>
:
actionViewClass
: Es la clase de un widget que implementa la acción.actionLayout
: Es un recurso de diseño que describe los componentes de la acción.
Establece el atributo showAsAction
en "ifRoom|collapseActionView"
.
"never|collapseActionView"
La marca collapseActionView
indica cómo
mostrar el widget cuando el usuario no esté interactuando con él. Si el widget está en la barra de la app, la app
muestra el widget como un ícono. Si el widget está en el menú ampliado, la app muestra el widget.
como un elemento de menú. Cuando el usuario interactúa con la vista de acción, se expande para llenar la barra de la app.
Por ejemplo, en el siguiente código, se agrega un widget SearchView
a la barra de la 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" />
Si el usuario no está interactuando con el widget, la app lo muestra como el ícono especificado.
de android:icon
. Si no hay espacio en la barra de la aplicación, la aplicación agrega la acción a la
menú ampliado.
Cuando el usuario toca el ícono o elemento del menú, el widget se expande para llenar la barra de herramientas, lo que permite que la cuando el usuario interactúa con él.
Si necesitas configurar la acción, hazlo en la sección
onCreateOptionsMenu()
devolución de llamada. Puedes obtener la referencia de objeto de la vista de acción llamando al
getActionView()
. Por ejemplo, en el siguiente código, se obtiene la referencia del objeto para SearchView
.
definido en el ejemplo de código anterior:
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); }
Cómo responder a la expansión de la vista de acción
Si el elemento <item>
de la acción tiene una marca collapseActionView
, la
La app muestra la vista de acción como un ícono hasta que el usuario interactúa con la vista de acción. Cuando el usuario
toca el ícono, el controlador integrado de
onOptionsItemSelected()
se expande la vista de acción. Si la subclase de tu actividad anula la
onOptionsItemSelected()
, tu método de anulación debe llamar
super.onOptionsItemSelected()
para que la superclase pueda expandir la vista de acción.
Si quieres realizar una acción cuando la acción se expande o se contrae, puedes definir una clase
implements
MenuItem.OnActionExpandListener
,
y pasar a un miembro de esa clase a
setOnActionExpandListener()
Por ejemplo, es posible que desees actualizar la actividad en función de si una vista de acción se expande o
contraída. En el siguiente fragmento de código, se muestra cómo definir y pasar un objeto de escucha:
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; }
Agregar un proveedor de acciones
Para declarar un proveedor de acciones, crea un elemento <item>
en el menú de la barra de herramientas.
como se describe en Cómo agregar y controlar acciones. Agrega un
actionProviderClass
y establecerlo en el nombre de clase completamente calificado del
clase de proveedor de acciones.
Por ejemplo, el siguiente código declara un ShareActionProvider
, que es un widget.
definidos en la biblioteca de AndroidX que permite que tu app comparta datos con otras apps:
<item android:id="@+id/action_share" android:title="@string/share" app:showAsAction="ifRoom" app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
En este caso, no es necesario declarar un ícono para el widget, ya que
ShareActionProvider
proporciona sus propios gráficos. Si usas una acción personalizada,
declarar un ícono.
Recursos adicionales
- Consulta
ShareActionProvider
para ver un ejemplo de cómo agregar una acción para compartir a la barra superior de la app. - Consulta
ActionProvider
para y obtén más información para crear un proveedor de acciones personalizadas.