domingo, 23 de febrero de 2014

Menús

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()) {
...


Referencias

https://developer.android.com/training/basics/actionbar/setting-up.html

No hay comentarios:

Publicar un comentario