Ejercicio 15 Menus Principal y Submenus Con Opciones
description
Transcript of Ejercicio 15 Menus Principal y Submenus Con Opciones
-
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):
Podemos ver en el cdigo anterior que la estructura bsica del diseo
del men es muy sencilla. Aparece un elemento principal que
contiene los elementos que corresponden con las diferentes
opciones del men.
Estos elementos 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 dentro del 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 static final int MENU_OP1 = 1; private static final int MENU_OP2 = 2; private static final int MENU_OP3 = 3; private static final int SMENU_OP1 = 31; private static final int 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