Cómo agregar y administrar acciones

Prueba la forma de Compose
Jetpack Compose es el kit de herramientas de IU recomendado para Android. Obtén información para agregar componentes en Compose.

La barra de la app te permite agregar botones para las acciones del usuario. Esta función te permite colocar las acciones más importantes para el contexto actual en la parte superior de la app. Por ejemplo, una app de búsqueda de fotos puede mostrar los botones para compartir y crear álbum en la parte superior cuando el usuario mira su rollo de fotos. Cuando el usuario mira una foto individual, la app puede mostrar botones de recorte y filtro.

El espacio en la barra de la app es limitado. Si una app declara más acciones de las que pueden caber en la barra de la app, esta envía las acciones sobrantes a un Menú ampliado. La app también puede especificar que una acción siempre se muestre en el Menú ampliado, en lugar de mostrarse en la barra de la app.

Una imagen que muestra la app de Ahora en Android con un ícono de barra de acción
Figura 1: Ícono de acción en la app de "Ahora en Android".

Cómo agregar botones de acción

Todos los botones de acción y demás elementos disponibles en el menú ampliado de acciones se definen en un recurso de menú XML. Para agregar acciones a la barra de acciones, crea un nuevo archivo en formato XML en el directorio res/menu/ de tu proyecto.

Agrega un elemento <item> por cada elemento que desees incluir en la barra de acciones, como se muestra en el siguiente archivo en formato XML de menú de ejemplo:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- "Mark Favorite", must appear as action button if possible. -->
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/ic_favorite_black_48dp"
        android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, must always be in the overflow. -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          app:showAsAction="never"/>

</menu>

El atributo app:showAsAction especifica si se debe mostrar la acción como un botón en la barra de la app. Si configuras app:showAsAction="ifRoom" (como en la acción favorita del código de ejemplo), la acción se muestra como un botón si hay espacio en la barra de la app. Si no hay suficiente espacio, las acciones excedentes se envían al Menú ampliado. Si configuras app:showAsAction="never" (como en la acción de configuración del código de ejemplo), la acción siempre aparecerá en el Menú ampliado, no en la barra de la app.

El sistema utiliza el ícono de la acción como botón de acción si esta se muestra en la barra de la app. Puedes encontrar muchos íconos útiles en Íconos de material.

Cómo responder a acciones

Cuando el usuario selecciona uno de los elementos de la barra de la app, el sistema llama al método de devolución de llamada onOptionsItemSelected() de tu actividad y pasa un objeto MenuItem para indicar en qué elemento se hizo clic. En tu implementación de onOptionsItemSelected(), llama al método MenuItem.getItemId() para determinar qué elemento se presionó. El ID que se muestra coincide con el valor que declaras en el atributo android:id del elemento <item> correspondiente.

Por ejemplo, en el siguiente fragmento de código, se verifica qué acción selecciona el usuario. Si el método no reconoce la acción del usuario, invoca al método de la superclase:

Kotlin

override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
    R.id.action_settings -> {
        // User chooses the "Settings" item. Show the app settings UI.
        true
    }

    R.id.action_favorite -> {
        // User chooses the "Favorite" action. Mark the current item as a
        // favorite.
        true
    }

    else -> {
        // The user's action isn't recognized.
        // Invoke the superclass to handle it.
        super.onOptionsItemSelected(item)
    }
}

Java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            // User chooses the "Settings" item. Show the app settings UI.
            return true;

        case R.id.action_favorite:
            // User chooses the "Favorite" action. Mark the current item as a
            // favorite.
            return true;

        default:
            // The user's action isn't recognized.
            // Invoke the superclass to handle it.
            return super.onOptionsItemSelected(item);

    }
}