Recurso de menú

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

Si deseas consultar una guía para usar los menús, consulta Cómo agregar menús.

ubicación del archivo:
res/menu/filename.xml
Se utiliza el nombre del archivo como ID de recurso
tipo de datos de recursos compilados:
Es un 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 se creó como un ID nuevo.
android:title
Recurso de cadenas. Es el título de menú que funciona como un recurso de cadenas o una cadena sin procesar.
android:titleCondensed
Recurso de cadenas. Es un título condensado que funciona como un recurso de cadenas o una cadena 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. Este acepta 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(). Consulta el ejemplo al final de esta página.

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

Se introdujo en el nivel de API 11.

android:showAsAction
Palabra clave. Indica cuándo y cómo se muestra este elemento como un elemento 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 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.

Para obtener más información, consulta Cómo usar vistas y proveedores de acciones.

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.

Para obtener más información, consulta Cómo usar vistas y proveedores de acciones.

Advertencia: Si ofuscas tu código con 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 completamente calificado para que ActionProvider use en lugar del elemento de acción. Por ejemplo, "android.widget.ShareActionProvider" para usar ShareActionProvider.

Para obtener más información, consulta Cómo usar vistas y proveedores de acciones.

Advertencia: Si ofuscas tu código con 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ÚSCULAS Corresponde a la tecla meta Mayúsculas.
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úsculas 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, consulta 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ÚSCULAS Corresponde a la tecla meta Mayúsculas.
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úsculas 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, consulta numericModifiers.

android:checkable
Booleano. Es verdadero 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 CATEGORY_* de Menu, 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 estar habilitados o de ser visibles o seleccionables. 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 se creó como un ID nuevo.
android:checkableBehavior
Palabra clave. Es el tipo de comportamiento de selección para el grupo. Valores válidos:
ValorDescripción
noneNo es seleccionable.
allSe pueden seleccionar todos los elementos (usa casillas de verificación).
singleSolo se puede seleccionar un elemento (usa 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 CATEGORY_* de Menu, 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 aumenta 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 Activity.onOptionsItemSelected.
}

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 Activity.onOptionsItemSelected.
}