Вы находитесь на странице: 1из 6

Ejercicio 15 Menus Principal y Submenus con Opciones

Como es habitual en Android, existen dos formas de crear un men en


una aplicacin Android: definiendo el men en un fichero XML e
"inflndolo" despus o creando el men directamente mediante cdigo
Java. En este apartado veremos ambas formas.
NOTA USE UN EMULADOR PARA API 10 (Nexus One)
NOTA EN ANDROID MANIFEST USE SOLO MIN-SDK 10

OPCION 1: INFLAR EL XML

Veamos en primer lugar cmo crear un men principal con un submen a


partir de su diseo en XML. Estos ficheros XML con el diseo del men
se deben guardar en la carpeta res\menu del proyecto y tienen una
estructura de este tipo (archivo menu_principal.xml):
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/MenuOp1" android:title="Opcin 1"
android:icon="@drawable/menu_estrella"></item>
<item android:id="@+id/MenuOp2" android:title="Opcin 2"
android:icon="@drawable/menu_brujula"></item>
<item android:id="@+id/MenuOp3" android:title="Opcin 3"
android:icon="@drawable/menu_direccion">
<menu>
<item android:id="@+id/SubMenuOp1"
android:title="Opcin 3.1" />
<item android:id="@+id/SubMenuOp2"
android:title="Opcin 3.2" />
</menu>
</item>
</menu>

Podemos ver en el cdigo anterior que la estructura bsica del diseo


del men es muy sencilla. Aparece un elemento principal <menu> que
contiene los elementos <item> que corresponden con las diferentes
opciones del men.

Estos elementos <item> tienen a su vez varias propiedades bsicas,


como su ID (atributo android:id), su texto (atributo android:title) y
su icono (atributo android:icon).

Los iconos utilizados deben guardarse en las carpetas res\drawable-...


del proyecto.

Adems, hemos definido un submen (men secundario) que se muestra al


pulsar la opcin 3 del un men principal. Los submens en Android se
muestran en una lista emergente cuyo ttulo contiene el texto de la
opcin elegida del men principal.

Este submen tiene dos nuevas opciones secundarias. Para ello, hemos
aadido un nuevo elemento <menu> dentro del <item> correspondiente a
la opcin 3.

De igual forma que otros archivos XML de un proyecto Android, podemos


editarlo visualmente haciendo clic en la pestaa Layout del archivo
que define el men:

Una vez definido el men en el fichero XML, hay que implementar el


mtodo onCreateOptionsMenu() de la Actividad para que se cree en la
pantalla.

En este mtodo debemos inflar el men de forma parecida a como ya


hemos hecho con otro tipo de componentes layouts. Primero obtenemos
una
referencia
al
objeto
"inflador"
mediante
el
mtodo

getMenuInflater() y, despus, generamos la estructura del men usando


el mtodo inflate() y pasndole como parmetro el ID del archivo XML
de diseo del men.

Finalmente, el mtodo debe devolver el valor true para indicar a la


Actividad que debe mostrar el men.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
//Forma 1: definimos el men inflando el fichero XML con su diseo
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_principal, menu);
return true;
}

OPCION 2 IMPLEMENTAR EL MENU CON JAVA

A continuacin, vamos a ver cmo implementar el diseo del men


programndolo con sentencias Java.

Para ello, redefinimos el mtodo onCreateOptionsMenu() aadiendo las


opciones del men mediante el mtodo add() del objeto Menu, que es un
parmetro del primer mtodo.

Este mtodo add() se invoca con cuatro parmetros:

ID del grupo asociado a la opcin: veremos qu es esto en el


siguiente ejemplo con un men contextual, por lo que
establecemos el valor Menu.NONE.
ID nico para la opcin: declaramos unas constantes de la clase.
Orden de la opcin: como no queremos indicar ninguno, utilizamos
Menu.NONE.
Texto de la opcin: texto que aparece en el men.

El icono de cada opcin lo establecemos mediante el mtodo setIcon()


pasndole el ID del recurso.

Veamos cmo queda el cdigo utilizando esta otra forma de


implementarlo que genera un men exactamente igual al del ejemplo
anterior:
private
private
private
private
private

static
static
static
static
static

final
final
final
final
final

int
int
int
int
int

MENU_OP1 = 1;
MENU_OP2 = 2;
MENU_OP3 = 3;
SMENU_OP1 = 31;
SMENU_OP2 = 32;

@Override
public boolean onCreateOptionsMenu(Menu menu) {

/* Forma 2: definimos el men con sentencias Java*/


menu.add(Menu.NONE, MENU_OP1, Menu.NONE, "Opcin
1").setIcon(R.drawable.menu_estrella);
menu.add(Menu.NONE, MENU_OP1, Menu.NONE, "Opcin
2").setIcon(R.drawable.menu_brujula);
SubMenu submenu = menu.addSubMenu(Menu.NONE, MENU_OP1, Menu.NONE, "Opcin
3").setIcon(R.drawable.menu_direccion);
submenu.add(Menu.NONE, SMENU_OP1, Menu.NONE, "Opcin 3.1");
submenu.add(Menu.NONE, SMENU_OP2, Menu.NONE, "Opcin 3.2");
return true;
}

Para aadir el submen a la opcin 3 utilizamos el mtodo addSubMenu()


en lugar de add() y guardamos una referencia al submen donde
insertamos las dos nuevas opciones utilizando una vez ms el mtodo
add().

Una vez construido el men, es necesario implementar las sentencias


que se ejecutan cuando el usuario selecciona una de las opciones, para
ello, usamos el evento onOptionsItemSelected() de la Actividad.

Este evento recibe como parmetro el elemento de men (MenuItem) que


ha sido elegido por el usuario y cuyo ID podemos obtener con el mtodo
getItemId(). En funcin de este ID podemos saber qu opcin ha sido
pulsada y ejecutar unas sentencias u otras. En nuestro ejemplo, lo
nico que hacemos es modificar el texto de la etiqueta labelResultado
que hemos colocado en la pantalla principal de la aplicacin:

@Override
// Si el usuario selecciona una opcin del men mostramos la opcin
seleccionada en la etiqueta
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.MenuOp1:
labelResultado.setText("Has pulsado la opcin 1");
return true;
case R.id.MenuOp2:
labelResultado.setText("Has pulsado la opcin 2");
return true;
case R.id.MenuOp3:
labelResultado.setText("Has pulsado la opcin 3");
return true;
case R.id.SubMenuOp1:
labelResultado.setText("Has pulsado la opcin 3.1");
return true;
case R.id.SubMenuOp2:
labelResultado.setText("Has pulsado la opcin 3.2");
return true;
default:
return super.onOptionsItemSelected(item);
}
} // end onOptionsItemSelected

LAS IMGENES EN DRAWABLE

Вам также может понравиться