arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Menús en Android

Eduardo Ismael Garcia

Full Stack Developer at Código Facilito.

av_timer 2 Min. de lectura

remove_red_eye 35652 visitas

calendar_today 30 Octubre 2014

Los menús son parte importante en nuestras aplicaciones e Integrar uno nuevo a nuestro proyecto es relativamente  fácil y solo es cuestión de modificar dos archivos.

En Android Existen 3 tipos de Menús:

  • Option Menu: Estos tipos de menú se encuentra diseñados para ser implementados en un Activity, dentro se colocan acciones concretas que el usuario en algún momento pueda solicitar, como Ajustes, About, Buscar etc…
  • Context Menu: Este tipo de menú es un menú flotante como editar, compartir, eliminar que solo aparece cuando el usuario realizo un clic prolongado en algún elemento.
  • Popup Menu: En este tipo de menú se muestra una lista de elementos en forma vertical con diferentes Opciones.
Para estos tipos de Menús Android proporciona un estándar (XML) para definir los elementos del menú, en este Post nos centraremos en el menú de opciones de un Activity.

Practica.

Para definir un menú es necesario crear un archivo XML dentro del directorio res/menú (Puedes utilizar el archivo main.xml que ya se encuentra dentro)  y agregar las siguientes líneas:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
 <item
      android:id="@+id/hola"
      android:title="@string/hola"/>
       
     <item
       android:id="@+id/adios"
       android:title="@string/adios"/>
</menu>

 Con estas nuevas líneas (Muy sencillas de comprender) obtenemos un pequeño menú con dos opciones, un hola y un adiós, asignamos un ID para su posterior manejo a cada uno de los ítems como lo realizamos normalmente con algún tipo de componente (Botón, Área de Texto etc. ) y colocamos un texto en ellos apoyándonos del archivo string.xml ( el cual se localiza en el directorio res/values dentro de nuestro proyecto).

Si necesitamos agregar un submenú a nuestro menú resulta ser una tarea muy sencilla, basta con agregar un nuevo menú  a nuestro Item en el cual deseemos que tenga el sub-menú tal como se muestra abajo.

<menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item
       android:id="@+id/dropTable"
       android:title="@string/dropTable"/>
       
     <item
       android:id="@+id/ourService"
       android:title="@string/service">
       
              <menu>
                 <item android:id="@+id/nuevo"
                       android:title="@string/nuevo"/>
                 <item android:id="@+id/nuevoDos"
                       android:title="@string/nuevoDos"/>
             </menu> </item> </menu>

Una vez tengamos desarrollado nuestro menú, procedemos a modificar nuestro método onCreateOptionsMenu:

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

Nota: En caso no hayas creado un nuevo archivo XML en la dirección res/menú para el menú, y hayas utilizado en main.xml que se enontraba ya existente no es necesario modificar nuestro método onCreateOptionsMenu y este debe quedar como lo siguiente.

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

Sin embargo hasta este punto nuestro menú es un menú inservible debido a que solo tiene la capacidad de aparecer pero no tiene ninguna funcionalidad, es por eso que debemos crear nuestro método onOptionsItemSelected que recibe como parámetro un objeto de tipo MenuItem.

Mediante un swith colocamos las diferentes opciones que pueden presentarse en el menú así como un pequeño mensaje mediante Tost para saber que las opciones funcionan.

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.hola:
        Toast.makeText(this, "Hola", Toast.LENGTH_LONG ).show();
         return true;
        case R.id.adios:
            Toast.makeText(this, "Adios, Toast.LENGTH_LONG ).show();
            return true;
        default:
            return super.onOptionsItemSelected(item);
            } }
 
Extras: 

En muchas ocasiones tendremos diferentes opciones para el usuario, en esos casos será necesario utilizar un menú o sub-menú el cual pueda ser marcado.
<group android:checkableBehavior="single">
        <item android:id="@+id/opcionUno"
              android:title="@string/ opcionUno" />
        <item android:id="@+id/opcionDos"
              android:title="@string/opcionDos" />
</group>
y con la linea android:checked="true" podemos establecer un item seleccionado por default. Dentro del Switch podemos establecer su nueva marcación.

case R.id.opcionUno:
if (item.isChecked()) item.setChecked(false);
    else item.setChecked(true);
return true;
case R.id.opcionDos:
if (item.isChecked()) item.setChecked(false);
    else item.setChecked(true);
return true;
Si deseamos agregar un icono para alguna opción de nuestro menú es necesario colocar la siguiente línea en nuestro <tiem> del xml.
android:icon="@drawable/nombre_del_icono"

Si aún conservamos dudas sobre como agregar alguna imagen o icono a un proyecto es una buena idea darte una vuelta por el curso de Android de Código Fácilito y en concreto este video:

https://www.youtube.com/watch?v=0mldZFd3BPY&index=21&list=PLN4U3dnOYpn4moPQiVz5QoByoHMoMg5Vd