Recurso de menú

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Un recurso de menú define un menú de aplicación (Menú de opciones, Menú contextual o submenú) que se puede completar con MenuInflater.

Consulta la guía para desarrolladores Menús y obtén más información sobre cómo usarlos.

ubicación del archivo:
res/menu/filename.xml
Se utilizará el nombre de archivo como ID de recurso.
tipo de datos de recursos compilados:
Puntero de recurso a un recurso Menu (o de subclase).
referencia del recurso:
En Java: R.menu.filename
En XML: @[package:]menu.filename
sintaxis:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@[+][package:]id/resource_name"
          android:title="string"
          android:titleCondensed="string"
          android:icon="@[package:]drawable/drawable_resource_name"
          android:onClick="method name"
          android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
          android:actionLayout="@[package:]layout/layout_resource_name"
          android:actionViewClass="class name"
          android:actionProviderClass="class name"
          android:alphabeticShortcut="string"
          android:alphabeticModifiers=["META" | "CTRL" | "ALT" | "SHIFT" | "SYM" | "FUNCTION"]
          android:numericShortcut="string"
          android:numericModifiers=["META" | "CTRL" | "ALT" | "SHIFT" | "SYM" | "FUNCTION"]
          android:checkable=["true" | "false"]
          android:visible=["true" | "false"]
          android:enabled=["true" | "false"]
          android:menuCategory=["container" | "system" | "secondary" | "alternative"]
          android:orderInCategory="integer" />
    <group android:id="@[+][package:]id/resource name"
           android:checkableBehavior=["none" | "all" | "single"]
           android:visible=["true" | "false"]
           android:enabled=["true" | "false"]
           android:menuCategory=["container" | "system" | "secondary" | "alternative"]
           android:orderInCategory="integer" >
        <item />
    </group>
    <item >
        <menu>
          <item />
        </menu>
    </item>
</menu>
elementos:
Obligatorio. Este debe ser el nodo raíz. Contiene elementos <item> o <group>.

atributos:

xmlns:android
Espacio de nombres XML. Obligatorio. Define el espacio de nombres XML, que debe ser "http://schemas.android.com/apk/res/android".
<item>
Es un elemento del menú. Puede contener un elemento <menu> (para un submenú). Debe ser un elemento secundario de un elemento <menu> o <group>.

atributos:

android:id
ID de recurso. Es un ID único de recurso. Si quieres crear un nuevo ID de recurso para este elemento, utiliza la forma: "@+id/name". El símbolo + indica que debe crearse como un ID nuevo.
android:title
Recurso de strings. Es el título de menú que funciona como un recurso de strings o una string sin procesar.
android:titleCondensed
Recurso de strings. Es un título condensado que funciona como un recurso de strings o una string sin procesar. Se usa este título en aquellas situaciones en las que el título normal es demasiado largo.
android:icon
Recurso de elemento de diseño. Es una imagen que se utilizará como ícono del elemento de menú.
android:onClick
Nombre del método. Es el método para llamar cuando se hace clic en este elemento de menú. El método debe declararse en la actividad como público y aceptar un MenuItem como su único parámetro, que indica el elemento en el que se hizo clic. Este método tiene prioridad sobre la devolución de llamada estándar a onOptionsItemSelected(). Mira el ejemplo al final.

Advertencia: Si ofuscas tu código con ProGuard (o una herramienta similar), asegúrate de excluir el método que especifiques en este atributo, ya que puede romper la funcionalidad.

Se introdujo en el nivel de API 11.

android:showAsAction
Palabra clave. Corresponde a cuándo y cómo debería aparecer este elemento como uno de acción en la barra de la app. Un elemento de menú puede aparecer como un elemento de acción solo cuando la actividad incluye una barra de la app. Valores válidos:
ValorDescripción
ifRoomSolo coloca este elemento en la barra de la app si hay espacio. Si no hay lugar para todos los elementos marcados como "ifRoom", se muestran como acciones los elementos que tengan los valores orderInCategory más bajos; los restantes aparecerán en el menú ampliado.
withTextIncluye también el texto del título (definido por android:title) con el elemento de acción. Puedes incluir este valor junto con uno de los otros marcadores separándolos con un canal |.
neverNunca coloques este elemento en la barra de la app. En su lugar, enumera el elemento en el menú ampliado de la barra de la app.
alwaysSiempre coloca este elemento en la barra de la app. Evita usar esta opción a menos que sea esencial que el elemento siempre aparezca en la barra de acción. Configurar varios elementos para que siempre aparezcan como elementos de acción puede hacer que se superpongan con otra IU en la barra de la app.
collapseActionViewEs posible contraer la vista de acción asociada a este elemento de acción (declarada por android:actionLayout o android:actionViewClass).
Se introdujo esta opción en el nivel de API 14.

Consulta la clase de capacitación Cómo agregar la barra de la app para obtener más información.

Se introdujo en el nivel de API 11.

android:actionLayout
Recurso de diseño. Es un diseño para usar como vista de acción.

Consulta Vistas de acción y proveedores de acción para obtener más información.

Se introdujo en el nivel de API 11.

android:actionViewClass
Nombre de clase. Es un nombre de clase completo para que View use como vista de acción. Por ejemplo, "android.widget.SearchView" para usar SearchView como vista de acción.

Consulta Vistas de acción y proveedores de acción para obtener más información.

Advertencia: Si ofuscas tu código usando ProGuard (o una herramienta similar), asegúrate de excluir la clase que especifiques en este atributo del cambio de nombre, ya que puede romper la funcionalidad.

Se introdujo en el nivel de API 11.

android:actionProviderClass
Nombre de clase. Es un nombre de clase completo para que ActionProvider use en lugar del elemento de acción. Por ejemplo, "android.widget.ShareActionProvider" para usar ShareActionProvider.

Consulta Vistas de acción y proveedores de acción para obtener más información.

Advertencia: Si ofuscas tu código usando ProGuard (o una herramienta similar), asegúrate de excluir la clase que especifiques en este atributo del cambio de nombre, ya que puede romper la funcionalidad.

Se introdujo en el nivel de API 14.

android:alphabeticShortcut
Char. Es un carácter para la combinación de teclas alfabéticas.
android:numericShortcut
Entero. Es un número para la combinación de teclas numéricas.
android:alphabeticModifiers
Palabra clave. Es un modificador para la combinación de teclas alfabéticas del elemento de menú. El valor predeterminado corresponde a la tecla Control. Valores válidos:
ValorDescripción
META Corresponde a la tecla meta Meta
CTRL Corresponde a la tecla meta Control
ALT Corresponde a la tecla meta Alt
MAYÚSCULA Corresponde a la tecla meta Mayúscula
SYM Corresponde a la tecla meta Sym
FUNCIÓN Corresponde a la tecla meta Función

Nota: Puedes especificar varias palabras clave en un atributo. Por ejemplo, android:alphabeticModifiers="CTRL|SHIFT" indica que, para activar el elemento de menú correspondiente, el usuario tiene que presionar las teclas meta Control y Mayúscula junto con la combinación de teclas.

Puedes usar el método setAlphabeticShortcut() para configurar los valores de los atributos de manera programática. Para obtener más información sobre el atributo alphabeticModifier, ve a alphabeticModifiers.

android:numericModifiers
Palabra clave. Un modificador para la combinación de teclas numéricas del elemento de menú. El valor predeterminado corresponde a la tecla Control. Valores válidos:
ValorDescripción
META Corresponde a la tecla meta Meta
CTRL Corresponde a la tecla meta Control
ALT Corresponde a la tecla meta Alt
MAYÚSCULA Corresponde a la tecla meta Mayúscula
SYM Corresponde a la tecla meta Sym
FUNCIÓN Corresponde a la tecla meta Función

Nota: Puedes especificar varias palabras clave en un atributo. Por ejemplo, android:numericModifiers="CTRL|SHIFT" indica que, para activar el elemento de menú correspondiente, el usuario tiene que presionar las teclas meta Control y Mayúscula junto con la combinación de teclas.

Puedes usar el método setNumericShortcut() para configurar los valores de los atributos de manera programática. Para obtener más información sobre el atributo numericModifier, ve a numericModifiers.

android:checkable
Booleano. Es "true" si se puede marcar el elemento.
android:checked
Booleano. Es "verdadero" si el elemento está marcado de forma predeterminada.
android:visible
Booleano. Es "verdadero" si el elemento es visible de forma predeterminada.
android:enabled
Booleano. Es "verdadero" si el elemento está habilitado de forma predeterminada.
android:menuCategory
Palabra clave. Es el valor correspondiente a las constantes Menu CATEGORY_*, que definen la prioridad del elemento. Valores válidos:
ValorDescripción
containerPara elementos que son parte de un contenedor
systemPara elementos proporcionados por el sistema
secondaryPara elementos que corresponden a opciones secundarias (poco utilizadas) proporcionadas por el usuario
alternativePara elementos que corresponden a acciones alternativas en los datos que se muestran en el momento
android:orderInCategory
Entero. Es el orden de "importancia" del elemento dentro de un grupo.
<group>
Es un grupo de menús (para crear una colección de elementos que comparten características, como el hecho de ser visibles, o de estar habilitados o marcados). Contiene uno o más elementos <item>. Tiene que ser un elemento secundario de un elemento <menu>.

atributos:

android:id
ID de recurso. Es un ID único de recurso. Si quieres crear un nuevo ID de recurso para este elemento, utiliza la forma: "@+id/name". El símbolo + indica que debe crearse como un ID nuevo.
android:checkableBehavior
Palabra clave. Es el tipo de comportamiento de marcado para el grupo. Valores válidos:
ValorDescripción
noneNo se puede marcar
allSe pueden marcar todos los elementos (usar casillas de verificación)
singleSolo se puede marcar un elemento (usar botones de selección)
android:visible
Booleano. Es "verdadero" si el grupo es visible.
android:enabled
Booleano. Es "verdadero" si el grupo está habilitado.
android:menuCategory
Palabra clave. Es el valor correspondiente a las constantes Menu CATEGORY_*, que definen la prioridad del grupo. Valores válidos:
ValorDescripción
containerPara grupos que forman parte de un contenedor
systemPara grupos proporcionados por el sistema
secondaryPara grupos integrados por opciones secundarias (poco utilizadas) que proporciona el usuario
alternativePara los grupos integrados por acciones alternativas en los datos que se muestran en un momento
android:orderInCategory
Entero. Es el orden predeterminado de los elementos dentro de la categoría.
ejemplo:
Archivo en formato XML guardado en res/menu/example_menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/item1"
          android:title="@string/item1"
          android:icon="@drawable/group_item1_icon"
          app:showAsAction="ifRoom|withText"/>
    <group android:id="@+id/group">
        <item android:id="@+id/group_item1"
              android:onClick="onGroupItemClick"
              android:title="@string/group_item1"
              android:icon="@drawable/group_item1_icon" />
        <item android:id="@+id/group_item2"
              android:onClick="onGroupItemClick"
              android:title="@string/group_item2"
              android:icon="@drawable/group_item2_icon" />
    </group>
    <item android:id="@+id/submenu"
          android:title="@string/submenu_title"
          app:showAsAction="ifRoom|withText" >
        <menu>
            <item android:id="@+id/submenu_item1"
                  android:title="@string/submenu_item1" />
        </menu>
    </item>
</menu>

El siguiente código de la aplicación completa el menú de la devolución de llamada de onCreateOptionsMenu(Menu) y también declara la devolución de llamada al hacer clic para dos de los elementos:

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.example_menu, menu)
    return true
}

fun onGroupItemClick(item: MenuItem) {
    // One of the group items (using the onClick attribute) was clicked
    // The item parameter passed here indicates which item it is
    // All other menu item clicks are handled by <code><a href="/reference/android/app/Activity.html#onOptionsItemSelected(android.view.MenuItem)">onOptionsItemSelected()</a></code>
}

Java

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.example_menu, menu);
    return true;
}

public void onGroupItemClick(MenuItem item) {
    // One of the group items (using the onClick attribute) was clicked
    // The item parameter passed here indicates which item it is
    // All other menu item clicks are handled by <code><a href="/reference/android/app/Activity.html#onOptionsItemSelected(android.view.MenuItem)">onOptionsItemSelected()</a></code>
}