Arquitectura de...

30
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles © 2012-2013 Depto. Ciencia de la Computación e IA Plataforma Android Sesión 4: Menús, listas y barras de progreso

Transcript of Arquitectura de...

Page 1: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IA 

Plataforma Android

Sesión 4: Menús, listas y barras de progreso

Page 2: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 2

Puntos a tratar

• Barras de progreso• Circular• Lineal• Seekbar

• Listas• ListActivity / ListView• Adaptadores• Ejemplos y eventos

• Menús• Sistema de menús de Android• Menú de actividades• Menús contextuales• Menús como recursos

Page 3: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 3

Barras de progreso

• Ante latencia, informar al usuario• Tipos

• ProgressBar Circular: tiempo indefinido o desconocido

• ProgressBar Lineal: tiempo conocido

• SeekBar: control gráfico para selección

Page 4: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 4

Bara de progreso circular

• Incorporar al layout

• setVisibility()• View.VISIBLE• View.INVISIBLE

<ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/progressbar" />

Page 5: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 5

Barra de progreso lineal

• Incorporar al layout

<ProgressBar android:layout_width="fill_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal" android:id="@+id/progreso" android:max="100" />

Page 6: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 6

Barra de progreso lineal

• Actualización basada en hilos

public class AndroidProgressBar extends Activity { ProgressBar progreso; int miProgreso = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); progreso=(ProgressBar)findViewById(R.id.progreso); new Thread(myThread).start(); }

Page 7: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 7

Barra de progreso lineal

• Actualización basada en hilos (continuación) private Runnable myThread = new Runnable(){ public void run() { while (miProgreso<100){ try{ myHandle.sendMessage(myHandle.obtainMessage()); Thread.sleep(1000); } catch(Throwable t){} } } Handler myHandle = new Handler(){ @Override public void handleMessage(Message msg) { miProgreso++; progreso.setProgress(miProgreso); } }; };}

Page 8: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 8

SeekBar

• Incorporar al layout

• Eventos: implementar interfaz SeekBar.OnSeekBarChangeListener

<SeekBar android:id="@+id/seek" android:layout_width="fill_parent" android:layout_height="wrap_content" android:max="100" android:progress="2" />

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {

// Hacer algo } public void onStartTrackingTouch(SeekBar seekBar) { // Hacer algo } public void onStopTrackingTouch(SeekBar seekBar) { // Hacer algo } seek.setOnSeekBarChangeListener(this);

Page 9: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 9

Listas

• Elemento muy importante• Vista ListView• Actividad que herede de ListActivity, de forma que

tendremos:• Todas las funcionalidades de una actividad• Funcionalidades para el manejo de listas• Contiene un adaptador

• Inicializado con setListAdapter(adaptador) en onCreate

• Adaptadores:• Proporciona a la lista los datos a mostrar• Subclase de BaseAdapter• Adaptadores estándar: ArrayAdapter, CursorAdapter

Page 10: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 10

Ejemplo de ListActivity 1/3

• Crear actividad como subclase de ListActivity• No es necesario llamar a setContentView

public class MiLista extends ListActivity { public void onCreate(Bundle icicle) { super.onCreate(icicle); }}

Page 11: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 11

Ejemplo de ListActivity 2/3

• Crear e inicializar un adaptador• Al final del método onCreate• Layout por defecto para los elementos de la lista:

android.R.layout.simple_list_item_1• Asociamos el adaptador a la lista con setListAdapter()

String[] valores = new String[] {"C", "Java", "C++", "Python", "Perl", "PHP", "Haskell", "Eiffel", "Lisp", "Pascal", "Cobol", "Prolog"};

ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, Valores);

setListAdapter(adaptador);

Page 12: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 12

Ejemplo de ListActivity 3/3

• Evento onListItemClick@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) { String elemento = (String)getListAdapter().getItem(position); Toast.makeText(this, elemento + " seleccionado", Toast.LENGTH_LONG).show();}

Page 13: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 13

Layout personalizado 1/2<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/icon" android:layout_width="22px" android:layout_height="22px" android:layout_marginLeft="4px" android:layout_marginRight="10px" android:layout_marginTop="4px" android:src="@drawable/icon"> </ImageView> <TextView android:id="@+id/etiqueta" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@+id/etiqueta" android:textSize="20px"> </TextView></LinearLayout>

• Layout para cada elemento de la lista

• Ejemplo: fichero layoutfila.xml en /res/layout/

Page 14: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 14

Layout personalizado 2/2

• Aplicando el layoutString[] valores = new String[] {"C", "Java", "C++", "Python", "Perl", "PHP", "Haskell", "Eiffel", "Lisp", "Pascal", "Cobol", "Prolog"};ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this, R.layout.layoutfila, R.id.etiqueta,

valores);setListAdapter(adaptador);

Page 15: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 15

Evento de pulsación larga

• Asociar evento mediante setOnItemLongClickListener• Requiere acceder al ListView: usamos getListView()

ListView list = getListView();

list.setOnItemLongClickListener(new OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MiLista.this, "Elemento nº " + position + " pulsado", Toast.LENGTH_LONG).show(); // Devolvemos el valor true para evitar que se dispare // también el evento onListItemClick return true; }});

Page 16: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 16

Otras opciones de listas

• Selección múltiple:

• Además es necesario definir el ArrayAdapter indicando como segundo parámetro: android.R.layout.simple_list_item_multiple_choice

• Para definir un Layout alternativo para las listas:• El ListView debe tener android:id=”@android:id/list”• Podemos añadir lo que queramos: Elementos TextView anterior y

posterior para cabecera y pie de lista

ListView listView = getListView();// Selección múltiple:listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);// Selección única:listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

Page 17: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 17

Menús

Tres etapas:• Menú de iconos

• Iconos y texto• Seis opciones como máximo (más opciones producirá un menú

extendido)• No muestra checkboxes, botones de radio o atajos

• Menú extendido• Listado vertical con barra de scroll

• Opciones que no caben en el menú de iconos

• No muestra iconos, pero sí checkboxes, radio o atajos

• Submenú• Ventana flotante• No se permiten submenús anidados• Sin iconos, pero sí checkboxes, radio o atajos

Page 18: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 18

Menú de actividad

static final private int MI_ELEMENTO = Menu.FIRST; @Overridepublic boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // Identificador de grupo int groupId = 0; // Identificador único del evento. Utilizado en // el manejador de evento correspondiente int menuItemId = MI_ELEMENTO; // Posición del elemento en el menú int menuItemOrder = Menu.NONE; // Texto que mostrará el menú de opciones int menuItemText = R.string.menu_item; // Creamos el elemento con todos estos datos MenuItem menuItem = menu.add(groupId, menuItemId, menuItemOrder, menuItemText); return true;}

Page 19: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 19

Personalizando el menú

• Checkboxes y botones de radio

• Atajos de teclado

// Creamos un elemento de tipo checkboxmenu.add(0, ELEMENTO_CHECKBOX, Menu.NONE, "CheckBox").setCheckable(true); // Creamos un grupo de botones de radiomenu.add(GRUPO_BR, BOTONRADIO_1, Menu.NONE, "Opción 1");menu.add(GRUPO_BR, BOTONRADIO_2, Menu.NONE, "Opción 2");menu.add(GRUPO_BR, BOTONRADIO_3, Menu.NONE, "Opción 3").setChecked(true);menu.setGroupCheckable(GRUPO_BR, true, true);

// Añadimos un atajo de teclado a esta opción del menú: '0' en el// caso de utilizar el teclado numérico, o 'b' en el caso de// utilizar un teclado completomenuItem.setShortcut('0','b');

Page 20: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 20

Personalizando el menú

• Texto resumido

• Iconos

• Intents• Al seleccionar el elemento, llamada a startActivity

menuItem.setTitleCondensed("Texto corto");

menuItem.setIcon(R.drawable.icono_opcion);

menuItem.setIntent(new Intent(this, OtraActividad.class));

Page 21: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 21

Personalizando el menú

• Manejador del evento click• Por motivos de eficiencia es preferible utlilizar

onOptionsItemSelected

menuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem _menuItem) { [ ... hacer algo, devolver true si todo correcto ... ] return true; }});

Page 22: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 22

Manejador de selección

• Un manejador global para el evento de selección de un elemento del menú• Elemento seleccionado pasado como parámetro (objeto

MenuItem)• Identificarlo mediante getItemId()

public boolean onOptionsItemSelected(MenuItem elemento) { super.onOptionsItemSelected(elemento); // Comprobamos qué elemento del menú fue seleccionado switch (elemento.getItemId()) { // Comparamos con los identificadores case (ELEMENTO_MENU): [ ... hacer algo ... ] return true; } // Devolvemos false si no hemos hecho nada con el // elemento seleccionado return false;}

Page 23: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 23

Actualización dinámica de opciones

• Sobrecargar el método onPrepareOptionsMenu• Invocado inmediatamente antes de mostrar el menú por pantalla• Acceso a un elemento del menú

• Guardar una referencia al elemento creado en onCreateOptionsMenu

• Utilizar Menu.findItem

@Overridepublic boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); MenuItem menuItem = menu.findItem(ELEMENTO_MENU); [ ... modificar el elemento del menú ... ] return true;}

Page 24: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 24

Submenús

• En otro tipo de aplicaciones: árbol jerárquico• En Android se simplifica la navegación entre menús

• Ventana flotante• Imposible tener submenús anidados

• Pueden contener cualquier tipo de elemento• Añadir elementos mediante add• Especificación del icono de la cabecera con setHeaderIcon• Icono de la opción en el menú desde el que se llama al submenú

con setIcon

SubMenu sub = menu.addSubMenu(0, 0, Menu.NONE, "Submenú");sub.setHeaderIcon(R.drawable.icon);sub.setIcon(R.drawable.icon);MenuItem elementoSubmenu = sub.add(0, 0, Menu.NONE, "Elemento submenú");

Page 25: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 25

Menús contextuales

• Una vista puede tener asociado un menú contextual• El menú se muestra si

• La vista tiene el foco• Se pulsa la pantalla durante tres segundos

• Definición de menús contextuales similar a la definición de menús normales• Registrar la vista a la que se le asignará el menú contextual• Sobrecargar onCreateContextMenu

• Manejador de evento para la selección de un elemento: similar a un menú normal, con onContextItemSelected

Page 26: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 26

Creando un menú contextual

1) Registrar la vista

2) Sobrecargar

@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EditText vista = new EditText(this); setContentView(vista); registerForContextMenu(vista);}

@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("Menú contextual"); menu.add(0, menu.FIRST, Menu.NONE, "El1").setIcon(R.drawable.menu_item); menu.add(0, menu.FIRST+1, Menu.NONE, "El2").setCheckable(true); menu.add(0, menu.FIRST+2, Menu.NONE, "El3").setShortcut('3','3'); SubMenu sub = menu.addSubMenu("Submenú"); sub.add("Elemento de submenú");}

Page 27: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 27

Selección en un menú contextual

@Overridepublic boolean onContextItemSelected(MenuItem item) { super.onContextItemSelected(item);

[ ... hacer algo ... ]

return false;}

● Manejador de eventos del menú contextual:

Page 28: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 28

Menús como recursosArchivo XML en /res/menu/• Cada menú en un fichero separado• Permite definir diferentes menús según configuración hardware e

idioma• Nombre del fichero: identificador del recurso• Elemento raíz <menu>

• Elementos <item>• Submenús por medio de elementos <menu>

• Para asociar el menú a una actividad:

public boolean onCreateOptionsMenu(Menu menu){

MenuInflater inflater = getMenuInflater();

// En este caso se usa el fichero de recurso menu.xml

inflater.inflate(R.menu.menu, menu);

return true

}

Page 29: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 29

Menús como recursos (ejemplo)<menu xmlns:android="http://schemas.android.com/apk/res/android" android:name="Menú contextual"> <item android:id="@+id/elemento01" android:icon="@drawable/elemento_menu" android:title="Elemento 1"></item> <item android:id="@+id/elemento02" android:checkable="true" android:title="Elemento 2"></item> <item android:id="@+id/elemento03" android:numericShortcut="3" android:alphabeticShortcut="3" android:title="Elemento 3"></item> <item android:id="@+id/elemento04" android:title="Submenú"> <menu> <item> android:id="@+id/elemento05" android:title="Elemento de submenú"></item> </menu> </item></menu>

Page 30: Arquitectura de Aplicacionesexpertojava.ua.es/dadm/restringido/android/traspas/sesion04-traspa… · Experto en Desarrollo de Aplicaciones para Dispositivos Móviles ... • Vista

Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

© 2012-2013 Depto. Ciencia de la Computación e IAPlataforma Android Menús, listas y progreso - 30

¿Preguntas...?