Los menús son elementos muy habituales en aplicaciones de interfaz
gráfico para incorporar acciones adicionales.
Compatibilidad
v1
Desde v11 los dispositivos NO están obligados a disponer de tecla
menú por lo que deben utilizar un ActionBar (compatibilidad con versiones inferiores con support.v7)
Lo mínimo necesario
Crear un fichero XML en la ubicación /res/menu:
<?xml version="1.0"encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/file"
android:title="@string/file">
<menu>
<item
android:id="@+id/create_new"
android:icon="@drawable/new"
android:showAsAction="true"
android:title="@string/create_new"/>
<item
android:id="@+id/open"
android:title="@string/open"/>
</menu>
</item>
</menu>
|
Cada elemento viene identificado por un id
para referencia desde código, un título y/o imagen
y si se indica el atributo showAsAction se mostrará en el ActionBar.
Para cada uno de ellos se puede definir a su
vez un submenú.
Sobrescribir el método onCreateOptionsMenu de
la Activity para cargar el menú:
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater =
getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return
true;
}
|
Sobrescribir onOptionsItemSelected para atender a los eventos de selección de ítem:
public boolean
onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_actualizar:
this.actualizar();
return true;
case R.id.menu_config:
this.configurar();
return true;
...
default:
return super.onContextItemSelected(item);
}
|
Menús Contextuales
Un menú contextual se refiere a acciones relacionadas con un
componente en concreto del interfaz gráfico. A menudo se asocia con la
pulsación larga sobre un elemento o ítem en concreto.
Para ello hay que registrar el componente para mostrar menú
contextual:
registerForContextMenu(tvMessage);
|
Cargar el fichero de menú
a
través del método onCreateContextMenu:
public void onCreateContextMenu(ContextMenu menu, View
v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu,
v, menuInfo);
MenuInflater inflater = getMenuInflater();
//Cargar fichero concreto en función de la vista seleccionada
inflater.inflate(R.menu.context_menu, menu);
}
|
Responder al evento a
través del método onContextItemSelected:
public boolean
onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo
info =
(AdapterContextMenuInfo)
item.getMenuInfo();
switch (item.getItemId()) {
...
|
No hay comentarios:
Publicar un comentario