Es muy frecuente que las aplicaciones Android dispongan de un menú para facilitar al usuario el acceso a determinas funciones de la aplicación. Para mostrar el menú, el usuario puede pulsar el botón Menu si el dispositivo cuenta con un botón físico para ello, o bien en pantalla se mostrará un icono en forma de puntos verticales que mostrarán de igual manera el menú. Esta última opción es la habitual a partir de Android 3.0.

menu01   menu02

La lista de opciones que va a ofrecer la aplicación debe declararse en un archivo XML creada en una carpeta menu dentro de los recursos de la aplicación. Como es habitual, se pueden crear distintas configuraciones de menús en distintas carpetas aplicando los cualificadores necesarios al nombre de la carpeta menu.

El asistente de creación de proyectos Android de Eclipse crea un archivo de menú con un sólo elemento, dentro de la carpeta res/menu con el nombre de la activity principal que se haya creado con el asistente.

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

    <item
        android:id="@+id/menu_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/menu_settings"/>

</menu>

Como puedes observar, este menú consta de un solo elemento (item). Cada elemento del menú debe declararse con la etiqueta item al que se le aplican una serie de atributos. La lista completa de atributos los puedes consultar en la página Menu Resource. Los más frecuentes son los siguientes:

  • android:id
    Un identificador único para el item, que permitirá a la aplicación reconocerlo cuando el usuario lo utilice.

  • android:icon
    Una referencia a un drawable que será usado como icono del elemento del menú. En la página de descargas de Android Developer puedes encontrar varios iconos muy frecuentes.
  • android:title
    Una referencia a un String que se mostrará como título del item.

En el archivo autogenerado aparecen además los siguientes:

  • android:showAsAction
    Espefica cuándo y cómo debería aparecer este item como un item de acción en la barra de acciones.
  • android:orderInCategory
    Permite reordenar los elementos del menú si fuera necesario.

Para añadir un nuevo item, puedes ayudarte del código del item que viene predefinido y hacer las moficaciones oportunas. Por ejemplo, si quieres hacer una opción de ayuda, el código XML del item podría ser:

<item android:id="@+id/help"
    android:icon="@drawable/icono_ayuda"
    android:title="@string/ayuda" />

El método onCreateOptionsMenu que permite mostrar el menú, ya lo debes tener disponible en código Java predefinido que crea el asistente del proyecto en la activity principal.

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

Observa que el método anterior se hace referencia al nombre del recurso menu (R.menu.activity_main) que se debe haber creado con la estructura del menú. Así que observa si debes cambiarlo, según el nombre del archivo XML que contiene el menú.

Para controlar los clics que hace el usuario sobre los elementos de un menú, se debe sobreescribir el método onOptionsItemSelected. Usando la sentencia switch con el dato que ofrece item.getItemId(), puedes controlar de manera sencilla el código correspondiente a cada elemento del menú a través de su ID.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_settings:
            configuracion();
            return true;
        case R.id.help:
            ayuda();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

Debes retornar true cada vez que se controla un item del menú, y en otro caso se retorna el valor ofrecido por la implementación de este método onOptionsItemSelected en la superclase.