Menú (xml) en android Studio.

En este tutorial veremos como crear y usar un menú dentro de Android Studio. En Android Stuido un menú es un archivo xml, el cual contiene varias opciones (items) que le das al usuario para realizar alguna tarea.

El archivo menu.xml se encuentra en los recursos dentro de tu proyecto. Esto facilita mucho las cosas. Ya que en ves de crear el mismo menú para cada activity.

Solo debes de crear un menú, al cual lo “llamas” en la activity que lo desees utilizar, y ademas dándole el formato que mejor se acomode a tu app (como action bar, menú desplegable, etc.).

Tipos de Menús.

Podemos decir que hay 3 tipos principales de menús.

Uno es el menú de opciones y barra de la app (action bar). El cual tiene lo principales elementos de la app, aquí debes de colocar las principales opciones de tu app, ya que son las que el usuario las tendrá a la mano.

Otro es el menú contextual. El cual solo aparece en ciertas ocasiones, cuando el usuario realiza alguna acción específica. Por ejemplo, cuando el usuario selecciona un texto, va a aparecer un menú contextual, el cual le da opciones sobre que hacer con lo que seleccionó (copiar, pegar, eliminar, etc).

El otro es el menú emergente. Este menú es como una extensión de las opciones que tiene tu aplicación (configuración, personalización, etc). Son opciones que no precisamente necesitan mostrarse siempre al usuario.

Por lo general este menú esta oculto, y al presionar un botón aparece. Por ejemplo, el navigation-drawer, que muestra una barra lateral de opciones.

¿Como crear un menú en Android Studio?

Para crear el menu.xml, es necesario hacer lo siguiente:

Localizamos las carpetas del proyecto, y damos Click derecho en la carpeta res –> New –> Android Resource File.

Luego se abre una pantalla, en la que tenemos que darle un nombre al menú, y en Resource Type debemos elegir la opción de menú, como se muestra en la siguiente imagen:

El archivo se encuentra en res/menu/menu_1.xml

El menú se define por:

<menu>

Contenido del menu, varios items

</menu>

 

Propiedades de los items del Menú.

El menú puede contener varios item, los cuales son las opciones que tendrá tu menú. Un item se crea de la siguiente manera:

<item
android:id="@+id/id_item1"          
android:icon="@drawable/icono"
android:title="@string/personalizar"
android:showAsAction="ifRoom"
/>

Las opciones dentro de el item anterior son las mas comunes.

La id se usa para identificar el item, icon es el icono que tendrá, text es el texto que sera visible en el menu y showAsAction indica si el item:

“always” siempre es visible, “ifRoom” solo si hay espacio si no se oculta, “never” oculto siempre.

Si quieres conocer mas elementos para algún item puedes visitar la página:

https://developer.android.com/guide/topics/resources/menu-resource?hl=es-419

 

Añadiendo grupos de items.

El menú acepta otro elemento ademas de los item, y es el group. Con el elemento <group> puedes agrupar los items. Este elemento no es visible.

Al agruparlos puedes darle ciertas características a los items del grupo, por ejemplo la visibilidad.

Si quieres mas información sobre como hacer grupos en el menú, ve el siguiente tutorial:

Grupos en el menú de Android Studio.

 

Como usar un menu.

Primero necesitamos crear un menú, como ya se describió anteriormente. Para usarlo tenemos que irnos a java.

Primero necesitamos reemplazar onCreateOptionsMenu, indicándole cual sera nuestro menú. Esto se hace como se muestra a continuación.

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

Con lo anterior le estas diciendo a Android Studio, que vas a usar el menu_1 como el de esta activity. Esto se hace en la opción inflater donde se pone el nombre del menú que se encuentra en recursos (R).

 

Presionando las opciones del menú.

Luego para saber cuando el usuario presiona alguna opción (item), se hace lo siguiente:

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    // gracias a la id, sabemos que item es el que se oprime, en este caso usamos un switch
    switch (item.getItemId()) 
    {
        case R.id.id_item1:
           //presiono em item1
           return true;
        case R.id.id_item2:
           //presiono em item2
           return true;
        default:
    }
    return super.onOptionsItemSelected(item);
}

En este caso se usa un switch, y con la id de cada item sabemos cual estamos seleccionando, ya solo es cuestión de agregar el código para efectuar la acción deseada de acuerdo a cada opción.

Puedes hacer lo mismo usando varios “if”.

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    // por la id, sabemos que item se oprime, en este caso usamos varios if
    if("id_item1" == item.getItemId())
    {
        //presionó el item1
    }
    else if("id_item2" == item.getItemId())
    {
        //presionó el item2
    }
    else
    {
        //presionó un item con diferente id, o una id desconocida
    }
    super.onOptionsItemSelected(item);

}

Podríamos decir el código clave es obtener la id del item item.getItemId().