Autor

Alejandro Alcalde

Data Scientist and Computer Scientist. Creator of this blog.

Más artículos de Alejandro Alcalde | Porfolio

Índice

Los menús en las aplicaciones son algo que encontramos frecuentemente, de hecho, casi todos los terminales Android tienen un botón específico para desplegarlos.

Se dispone de distintos tipo de menús:

Options Menu

Lo más simple y sencillo es definir los menús en XML, colocado en ./res/menu, para este ejemplo he definido el siguiente menu, que contiene dos elementos, un About y un Quit:

<?xml version="1.0" encoding="utf­8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/about"
        android:icon="@drawable/about"
        android:title="About App">
        <menu xmlns:android="http://schemas.android.com/apk/res/android">
            <item
                android:id="@+id/submenu"
                android:title="Submenú de &quot;About App&quot;"/>
        </menu>
    </item>
    <item
        android:id="@+id/quit"
        android:title="Quit App"
        android:icon="@drawable/quit"/>
</menu>

Bien, voy a explicar un poco la estructura de este menú, Empezamos declarando el menú con la etiqueta <menu>, que contendrá todos sus elementos bajo la etiqueta <item>, en este caso, también tenemos un submenu, que se declara igual que el menú principal.

Los atributos de cada elemento son su identificador, el icono a mostrar y el título.

Para poder usar este menú, necesitamos inflarlo (Convertir el fichero XML en un objeto java), para hacer esto, hay que llamar a MenuInflater.inflate(), el código siguiente infla el fichero xml anterior en el método callback onCreateOptionsMenu().

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

Ahora, tenemos que responder a las acciones del usuario cuando pulse algún elemento de nuestro menú, para ello vamos a sobreescribir el método onOptionsItemSelected()

@Override
public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
   case R.id.about:
      Toast.makeText(
            MenusActivity.this
           ,"Ejemplo Menús App"
           ,Toast.LENGTH_LONG)
           .show();
      return true;

   case R.id.quit:
      finish();
      return true;

   default:
      return super.onOptionsItemSelected(item);
   }
}

Context Menu

Los menús contextuales son similares a los menús mostrados al hacer click con el botón derecho de un ratón en un PC, para crearlos, debemos sobreescribir el método onCreateContextMenu(), donde inflaremos el archivo xml.

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
      ContextMenuInfo menuInfo) {
   super.onCreateContextMenu(menu, v, menuInfo);
   MenuInflater inflater = getMenuInflater();
   inflater.inflate(R.menu.ejemplo_menu, menu);
}

Al igual que en los options menu, tenemos que responder a las acciones del usuario:

@Override
public boolean onContextItemSelected(MenuItem item) {
   switch (item.getItemId()) {
   case R.id.about:
      Toast.makeText(
            MenusActivity.this
           ,"Ejemplo Menús App"
           ,Toast.LENGTH_LONG)
           .show();
      return true;

   case R.id.quit:
      finish();
      return true;

   default:
      return super.onOptionsItemSelected(item);
   }
}

Pero este menú contextual no se va a mostrar, ya que tenemos que asociarlo para que se lanze al realizar una pulsación prolongada sobre una view, en este caso un botón:

final Button boton = (Button) findViewById(R.id.button1);
registerForContextMenu(boton);

Aquí dejo algunas capturas de pantalla de la aplicación:

Podéis encontrar más información sobre Menús en la página oficial de Android

Espero que os sirva de ayuda.

Siguiente Tema: Programación Android: Interfaz gráfica - Diálogos y notificaciones

¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.

Quizá también te interese leer...