Cómo agregar y administrar acciones

La barra de la app te permite agregar botones para las acciones del usuario. Esta función te permite ubicar las acciones más importantes para el contexto actual en la parte superior de la app Por ejemplo, una app de navegación de fotos podría mostrar las opciones compartir y crear de álbumes que se encuentran en la parte superior cuando el usuario mira su rollo de fotos. Cuándo el usuario mira una foto individual, la app puede mostrar recorte y filter.

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

Una imagen que muestra la app de Now in Android con un ícono de barra de acciones
Figura 1: Un ícono de acción en la sección "Now in Android" .

Cómo agregar botones de acción

Todos los botones de acción y otros elementos disponibles en el menú ampliado de acciones son definido en un archivo XML recurso de menú. Para agregar acciones en la barra de acciones, crea un nuevo archivo en formato XML en el res/menu/.

Agrega un <item> para cada elemento que desees incluir en la barra de acciones, como se muestra en el siguiente archivo 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 realizar la acción se muestra como un botón en la barra de la aplicación. Si estableces app:showAsAction="ifRoom", como en el archivo favorite: La acción se muestra como un botón si hay espacio en la barra de la aplicación. Si no hay suficiente espacio, las acciones sobrantes se envían al menú ampliado. Si configuras app:showAsAction="never", como en la acción settings del código de ejemplo, la acción siempre aparece en el el menú ampliado y no se muestra en la barra de la app.

El sistema usa el ícono de la acción como botón de acción si esta se muestra en la barra de la aplicación. Puedes encontrar muchos iconos ú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 a de la actividad onOptionsItemSelected() de devolución de llamada y pasa un Objeto MenuItem para indicar qué elemento se presionó. En la implementación de onOptionsItemSelected(), llama al MenuItem.getItemId() para determinar qué elemento se presionó. El ID devuelto coincide con el valor que declarar en el elemento <item> correspondiente android:id.

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

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);

    }
}