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:
Valor | Descripción |
ifRoom | Solo 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. |
withText | Incluye 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 | . |
never | Nunca 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. |
always | Siempre 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. |
collapseActionView | Es 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:
Valor | Descripció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:
Valor | Descripció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:
Valor | Descripción |
container | Para elementos que son parte de un contenedor |
system | Para elementos proporcionados por el sistema |
secondary | Para elementos que corresponden a opciones secundarias (poco utilizadas) proporcionadas por el usuario |
alternative | Para 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:
Valor | Descripción |
none | No es seleccionable. |
all | Se pueden seleccionar todos los elementos (usa casillas de verificación). |
single | Solo 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:
Valor | Descripción |
container | Para grupos que forman parte de un contenedor |
system | Para grupos proporcionados por el sistema |
secondary | Para grupos integrados por opciones secundarias (poco utilizadas) que proporciona el usuario |
alternative | Para 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.
}