21 octubre 2010

Definir Menús en XML en Androide

Se pueden definir los menús mediante XML y luego inflarlos en el método onCreate() del menú, esto hace que su aplicación presente un código más limpio y separa su diseño en XML lo cual resulta más fácil de visualizar.

Para comenzar debemos crear una carpeta del proyecto en el directorio res/ aquí es donde se deberían guardar todos los XML que definen los menús de la aplicación.

En un layout de XML para crear un menú hay tres elementos válidos: <menu>, <group> e <item>. El artículo (item) y los elementos de grupo (group) deben ser hijos de un menú.

Por ejemplo, vamos a definir un menú de opciones, comenzamos creando el XML donde vamos a definir nuestro menú, vamos a llamarle options_menu.xml y lo pondremos dentro del directorio: res/menu.

Luego en el onCreateOptionsMenu() debemos inflarlo usando el recurso: MenuInflater.inflate()

getMenuInflater() devuelve el MenuInflater para el contexto de nuestra actividad. Entonces llamamos a inflate() pasando un puntero a nuestro recurso de menú y el objeto de tipo Menú definido en la llamada a la función.

Aunque pueda parecer un poco más engorroso este método de crear los menús de nuestra aplicación cuando se tratan de muchas opciones para los menús, esta vía es más cómoda y hace nuestro código más limpio.



20 octubre 2010

Submenú en Androide

Un submenú puede ser añadido dentro de cualquier otro menú excepto dentro de otro submenú. Los submenús son muy útiles cuando la aplicación presenta muchas opciones que pueden ser organizadas por temas, por ejemplo: archivo, edición, herramientas, etc.

Un submenú se añade a otro menú existente mediante el método addSubMenu(). Este método devuelve el objeto de tipo SubMenu y entonces con este objeto devuelto se pueden añadir opciones al submenú con el método add().

public boolean onCreateOptionsMenu(Menu menu) {

boolean result = super.onCreateOptionsMenu(menu);

SubMenu fileMenu = menu.addSubMenu("File");

SubMenu editMenu = menu.addSubMenu("Edit");

fileMenu.add("new");

fileMenu.add("open");

fileMenu.add("save");

editMenu.add("undo");

editMenu.add("redo");

return result;

}

Las llamadas para los artículos seleccionados del submenú son hechas dentro de la llamada al método de selección del menú padre, en este ejemplo se harían dentro del método onOptionsItemSelected().