Desarrollo de un reproductor mp3

Documentos relacionados
Android y Java para Dispositivos Móviles

Desarrollo de Aplicaciones para Android

Desarrollo de Aplicaciones para Android

Android avanzado. Sesión 5: Notificaciones. Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

Interfaz de usuario. Índice

Aplicación para lista de tareas

Desarrollo de Aplicaciones para Android

Servicios Basados en Localización (LBS) Tema 6 Desarrollo de aplicaciones en Android

Activities/Intents en Android LSUB, GSYC, URJC

Android TAG y el principio DRY

Taller Desarrollo. Tecnólogo Informática - 6to Semestre Montevideo

Servicios de la plataforma Android

Manejadores en Android LSUB, GYSC, URJC

INICIACIÓN A LA PROGRAMACIÓN PARA ANDROID

Interfaz de usuario Layout Vistas Adaptadores Eventos de interacción Estilos y temas

Unidad 5. Interfaz de Usuario

Cursos de orientación profesional

ALMACENAMIENTOS DE DATOS EN ANDROID CON SQLITE

Crear listas personalizadas en Android

Layouts en Android LSUB, GSYC, URJC

Android Manejo de Eventos. Rogelio Ferreira Escutia

Crear un Splash-Screen

Tema 2: Diseño de servicios para móviles

Curso Android. ADT Bundle. Android Developer Tools. Entorno de trabajo Toolbar principal SDK Manager. Emulador de Android. Crear proyecto Android

Android y Recursos. Android R.java (fichero)

MANIPULACIÓN DE VISTAS (VIEW)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles. Plataforma Android. Sesión 1: introducción a Android

Aurelio López Ovando Botón de pánico (App para Android)

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles. Plataforma Android

Ejercicio 18. Configuración de Widgets en Android. Android Con Java. Ejercicio 18. Configuración de Widgets en Android. Curso de Android con Java

INTRODUCCIÓN A LA PROGRAMACIÓN ANDROID. Duración en horas: 60 OBJETIVOS DEL CURSO

CODIGO PROYECTO: AppPixelproServicioWeb Proyecto Android - Servicio Web

Interfaces de usuario [Desarrollo de aplicaciones para Android]

Ejercicio 4. Manejo de Layouts en Android. Android Con Java. Ejercicio 4. Manejo de Layouts en Android. Curso de Android con Java

Programación Android. Alejandro Alcalde. elbauldelprogramador.com

GUIA DE LABORATORIO N 1

Unidad III.- Desarrollo de la interfaz de usuario. Diseño de layouts en Android.

SESIÓN 5 MANEJO DE BASES DE DATOS SQLITE

Diseño de interfaces gráficas. JOSE LUIS BERENGUEL GÓMEZ Febrero 2012

Ejercicios - Introducción a Android

Plataforma Android. Sesión 4: Menús, listas y barras de progreso. Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

PRACTICAS DE ANDROID 12 - Lanzar un segundo "Activity" y pasar parámetros Problema:

Unidad 3. PrimerProyecto. Nuestra primera aplicacio n Android

Introducción a la programación de aplicaciones con Android. Fernando Pérez Costoya

ANDROID INTERMEDIO - E-LEARNING - EN LÍNEA

SOLUCIÓN AL LABORATORIO DEL DÍA SÁBADO 29 DE JUNIO DE 2013

Desarrollo de Aplicaciones para Android

Android y Java para Dispositivos Móviles

Ejercicio 3. Manejo de la Vista y Eventos en Android Ejercicio 3 Curso de Android con Java Derechos Res Dere e c rvados hos Res Gl e obal rva

Que es un Android Intent?

INTRODUCCIÓN A LA PROGRAMACIÓN ANDROID

ANDROID BÁSICO - E-LEARNING - EN LÍNEA

Importar y exportar aplicaciones Para importar proyectos de Android a Android studio

Bloque 2. Desarrollo de Aplicaciones en Android

Especialista Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles. Plataforma Android

Taller Mi Primera Aplicación Android

Curso de introducción a Android

TALLER DE INICIACIÓN A ANDROID

Desarrollo en Android (v1.0)

Android UI. Darío Fernando Chamorro Vela Junio 2012

Curso de iniciación a Java para Android (60 horas)

MASTER DESARROLLO DE APLICACIONES ANDROID

Tecnología de Programación

Android 7 Principios del desarrollo de aplicaciones Java

OBJETOS VIEW. Cristobal Raya Giner. Programació de Dispositius Mòbils (PRDM)

ANDseries Autor: Miró Monleón, Edgar

Sesión 4. Interfaz de Usuario en Android. Ing. Edwin Andrés Cubillos Vega Msc. Company LOGO

Introducción al manejo de Bases de Datos con SQLite. Version Android

Programación en Android LSUB, GSYC, URJC

Patricio Olivares. 25 de abril de 2017

BEGINNERS CURSO TALLER: años. INICIO: 15 DE SETIEMBRE Viernes de 19:00 a 22:00h y sábados 09:00 a 12:00h

Manual Mca006. Manual Mca006 CURSO ANDROID DESARROLLO de APLICACIONES MÓVILES, 24 horas

Ejercicios - Introducción al diseño de interfaces gráficas en Android

Temas. CopyRight emmmnmmma - All rights reserved 2

Gráficos y multimedia

Curso de programación en Android. 19/Junio/2012 Ramón Alcarria Augusto Morales

Ejercicios - Menús, listas y barras de progreso

Introducción a la programación de aplicaciones con Android. Fernando Pérez Costoya

Universitat Oberta de Catalunya. Cuaderno de Viaje. Memoria

package com.example.dialogov1;

CURSO INTERMEDIO DE PROGRAMACIÓN EN ANDROID

Plataforma Android. Sesión 5: Drawables, estilos y temas. Experto en Desarrollo de Aplicaciones para Dispositivos Móviles

DESARROLLO DE APLICACIONES EN ANDROID

Tareas en segundo plano AsyncTask Thread

En nuestra actividad principal, creamos el objeto vista previa. Este objeto se creará el objeto cámara y volver a la actividad CameraDemo.

Desarrollo de Aplicaciones para Android

Grabación de audio/vídeo y gráficos avanzados en Android - Ejercicios

ANEXO 2: Código fuente de la aplicación

Practica. Material Design. lunes 10 de octubre de 16

Android Creación de una aplicación sencilla: Forwarding - Página 1 -

Intefaz de usuario - Ejercicios

Android 4 Principios del desarrollo de aplicaciones Java

SALVADOR GÓMEZ OLIVER

CREACIÓN DE NUEVAS ACTIVIDADES

Desarrollo de Aplicaciones para Android

Manual Básico Android Studio

Transcripción:

Curso 13/14 Desarrollo de Desarrollo de un reproductor mp3

Contenidos Ciclo de vida Fragmentos Menús Desarrollo de la aplicación Mp3Player paso a paso Eventos de la UI Cuadros de diálogo MediaPlayer Intents ListViews y Layouts Mp3Player 2

Mp3Player: Paso 1 Creación de una aplicación vacía, basada en el hola mundo Mp3Player 3

Ciclo de vida Una aplicación está compuesta por Activities El Manifest indica cuál será la Activity inicial Debe indicar como acción MAIN Debe indicar como categoría LAUNCHER <application <application android:allowbackup="true" android:allowbackup="true" android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:label="@string/app_name" android:theme="@style/apptheme" android:theme="@style/apptheme" > > <activity <activity android:name="com.cep.mp3player.mainactivity" android:name="com.cep.mp3player.mainactivity" android:label="@string/app_name" android:label="@string/app_name" > > <intent-filter> <intent-filter> <action <action android:name="android.intent.action.main" android:name="android.intent.action.main" <category <category android:name="android.intent.category.launcher" android:name="android.intent.category.launcher" </intent-filter> </intent-filter> </activity> </activity> </application> </application> En caso contrario no aparecerá el icono en la lista de Apps Mp3Player 4

Ciclo de vida Ciclo de vida de la actividad: Comienza ejecutando el método oncreate() Termina ejecutando ondestroy() @Override @Override protected protected void void oncreate(bundle oncreate(bundle savedinstancestate) savedinstancestate) super.oncreate(savedinstancestate); super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); setcontentview(r.layout.activity_main); @Override @Override public public void void ondestroyview() ondestroyview() super.ondestroyview(); super.ondestroyview(); Mp3Player 5

Fragmentos A partir de 3.0 (API level 11) Divide la interfaz de usuario de la actividad en bloques independientes Facilita la adecuación del UI al dispositivo Tiene su propio layout Mp3Player 6

Fragmentos Ciclo de vida Inicialización de componentes Que deben mantenerse cuando El fragmento está parado pausado @Override @Override public View oncreateview((layoutinflater inflater, ViewGroup container, public View oncreateview((layoutinflater inflater, ViewGroup container, Bundle savedinstancestate) Bundle savedinstancestate) View rootview = inflater.inflate(r.layout.fragment_main, View rootview = inflater.inflate(r.layout.fragment_main, container, false); container, false); return rootview; return rootview; Necesario para que la Actividad pueda dibujarlo Instante en el que guardar los datos que deban persistir Mp3Player 7

Fragmentos Creación estática: declarándolo dentro del layout de la actividad <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:orientation="horizontal" android:layout_width="match_parent" android:layout_width="match_parent" android:layout_height="match_parent"> android:layout_height="match_parent"> <fragment android:name="com.example.news.articlelistfragment" <fragment android:name="com.example.news.articlelistfragment" android:id="@+id/list" android:id="@+id/list" android:layout_weight="1" android:layout_weight="1" android:layout_width="0dp" android:layout_width="0dp" android:layout_height="match_parent" android:layout_height="match_parent" </LinearLayout> </LinearLayout> Creación dinámica: de forma programática // // 1. 1. Obtener Obtener el el gestor gestor de de fragmentos, fragmentos, y y a a partir partir de de él él abrir abrir una una transacción transacción FragmentManager FragmentManager fragmentmanager fragmentmanager = = getfragmentmanager() getfragmentmanager() FragmentTransaction FragmentTransaction fragmenttransaction fragmenttransaction = = fragmentmanager.begintransaction(); fragmentmanager.begintransaction(); // // 2. 2. Añadir Añadir el el nuevo nuevo fragmento fragmento indicado indicado su su layout layout ExampleFragment ExampleFragment fragment fragment = = new new ExampleFragment(); ExampleFragment(); fragmenttransaction.add(r.id.fragment_container, fragmenttransaction.add(r.id.fragment_container, fragment); fragment); // // 3. 3. Commit Commit para para cerrar cerrar la la transacción transacción fragmenttransaction.commit(); fragmenttransaction.commit(); Mp3Player 8

Mp3Player: Paso 2 Adición de una opción de menú para abandonar la aplicación Crear un recurso string action_exit con texto Salir Añadir un nuevo item al menú, con id. action_exit, y referenciando la cadena del mismo nombre Añadir la nueva opción al código que trata las opciones de menú Debe ejecutar finish() para abandonar la aplicación Mp3Player 9

Menús Desde 3.0 se está migrando del botón dedicado a menús hacia la barra de acciones. Tres tipos de menús: Menú de opciones: aparece cuando el usuario presiona el botón MENU. Menú de contexto: opciones que aparecen cuando el usuario toca y mantiene el elemento que tiene asociado dicho menú. Submenú: aparece cuando el usuario selecciona una entrada del menú. Mp3Player 10

Definición del menú Sea cual sea el tipo, se recomienda definirlo como un recurso más en su fichero XML: p.ej.: res/menu/main.xml <menu <menu xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android"> <item <item android:id="@+id/action_settings" android:id="@+id/action_settings" android:orderincategory="100" android:orderincategory="100" android:showasaction="never" android:showasaction="never" android:title="@string/action_settings" android:title="@string/action_settings" </menu> </menu> Eclipse ofrece edición gráfica (pestaña Layout) Mp3Player 11

Creación del menú Hinchar (inflate) el menú mediante código: cargarlo como un objeto programable @Override @Override public public boolean boolean oncreateoptionsmenu(menu oncreateoptionsmenu(menu menu) menu) MenuInflater MenuInflater inflater inflater = = getmenuinflater(); getmenuinflater(); inflater.inflate(r.menu.main, inflater.inflate(r.menu.main, menu); menu); return return true; true; En este caso se crea un menú de opciones La actividad invoca oncreateoptionsmenu como parte de su proceso de creación Mp3Player 12

Selección de opciones del menú Ante una selección, el sistema invoca onoptionsitemselected Único argumento del tipo MenuItem @Override @Override public public boolean boolean onoptionsitemselected(menuitem item) item) switch switch (item.getitemid()) (item.getitemid()) case case R.id.action_settings: return return true; true; return return super.onoptionsitemselected(item); Mp3Player 13

Mp3Player: Paso 3 Adición de una opción de menú para mostrar un cuadro de diálogo con los créditos de la App Añadir un nuevo item al menú, con id. action_about, que muestre el texto Acerca de... Crear un cuado de diálogo de alerta al seleccionar la opción Debe mostrar el texto Mp3Player v0.1 Debe incluir un botón positivo con el mensaje Aceptar. Mp3Player 14

Eventos de la IU La interacción con la IU genera eventos que pueden capturarse para su tratamiento Listeners: Interfaz de la clase View con callbacks para la captura de los eventos private private OnClickListener MyListener MyListener = new new OnClickListener() public public void void onclick(view onclick(view v) v) // // acciones acciones a realizar realizar al al pulsar pulsar el el botón botón ; ; protected protected void void oncreate(bundle savedvalues) savedvalues)...... // // referencia referencia al al botón botón desde desde el el layout layout Button Button button button = (Button)findViewById(R.id.my_button); // // Registro Registro del del listener listener para para el el evento evento onclick onclick button.setonclicklistener(mylistener);...... Mp3Player 15

Eventos de la IU Evento Listener Se produce.. onclick View.OnClickListener Al pulsar la vista onlongclick View.OnLongclick Con pulsación larga onfocuschange View.OnFocusChangeListener Al recibir o abandonar el foco onkey View.OnKeyListener Al pulsar una tecla con la vista seleccionada ontouch View.OnTouchListener Al pulsar, soltar o hacer un gesto sobre la pantalla oncreatecontextmenu View.OnCreateContextMenuListener Al crear un menú de contexto por una pulsación larga View.setOn[Event]Listener Mp3Player 16

Cuadros de diálogo Utilizados para solicitar información extra al usuario o realizar notificaciones Título: opcional Contenido: depende del tipo de diálogo Botones: para el control de acciones Mp3Player 17

Tipos Alerts Popups Toasts Mp3Player 18

AlertDialog // // La La clase clase AlertDialog.Builder AlertDialog.Builder proporciona proporciona una una API API para para crear crear cuadro cuadro de de diálogo diálogo de de alerta alerta AlertDialog.Builder AlertDialog.Builder builder builder = = new new AlertDialog.Builder(this); AlertDialog.Builder(this); // // Los Los métodos métodos que que fijan fijan las las características características se se pueden pueden encadenar encadenar builder.setmessage("are builder.setmessage("are you you sure sure you you want want to to exit?") exit?").setcancelable(false).setcancelable(false).setpositivebutton("yes",.setpositivebutton("yes", new new DialogInterface.OnClickListener() DialogInterface.OnClickListener() public public void void onclick(dialoginterface onclick(dialoginterface dialog, dialog, int int id) id) MyActivity.this.finish(); MyActivity.this.finish(); ) ).setnegativebutton("no",.setnegativebutton("no", new new DialogInterface.OnClickListener() DialogInterface.OnClickListener() public public void void onclick(dialoginterface onclick(dialoginterface dialog, dialog, int int id) id) dialog.cancel(); dialog.cancel(); ); ); // // Por Por último último se se realiza realiza la la instancia instancia AlertDialog AlertDialog alert alert = = builder.create(); builder.create(); // // Para Para mostrarlo mostrarlo debe debe invocarase invocarase al al método método show() show() alert.show(); alert.show(); Mp3Player 19

AlertDialog con listas final final CharSequence[] CharSequence[] items items = = "Red", "Red", "Green", "Green", "Blue"; "Blue";...... builder.settitle("pick builder.settitle("pick a a color"); color"); // // single single choice choice list list builder.setitems(items, builder.setitems(items, new new DialogInterface.OnClickListener() DialogInterface.OnClickListener() public public void void onclick(dialoginterface onclick(dialoginterface dialog, dialog, int int item) item) Toast.makeText(getApplicationContext(), Toast.makeText(getApplicationContext(), items[item], items[item], Toast.LENGTH_SHORT).show(); Toast.LENGTH_SHORT).show(); ); ); SetMultipleChoiceItems() para checkboxes // // radio radio buttons buttons list list builder.setsinglechoiceitems(items, builder.setsinglechoiceitems(items, -1, -1, new new DialogInterface.OnClickListener() DialogInterface.OnClickListener() public public void void onclick(dialoginterface onclick(dialoginterface dialog, dialog, int int item) item) Toast.makeText(getApplicationContext(), Toast.makeText(getApplicationContext(), items[item], items[item], Toast.LENGTH_SHORT).show(); Toast.LENGTH_SHORT).show(); ); ); Mp3Player 20

AlertDialog: otros tipos ProgressDialog ProgressDialog dialog dialog = = ProgressDialog.show(MyActivity.this, ProgressDialog.show(MyActivity.this, "", "", "Loading. "Loading. Please Please wait...", wait...", true); true); ProgressDialog ProgressDialog progressdialog; progressdialog; progressdialog progressdialog = = new new ProgressDialog(mContext); ProgressDialog(mContext); progressdialog.setprogressstyle(progressdialog.style_horizontal); progressdialog.setprogressstyle(progressdialog.style_horizontal); progressdialog.setmessage("loading..."); progressdialog.setmessage("loading..."); progressdialog.setcancelable(false); progressdialog.setcancelable(false); Mp3Player 21

Fragmentos de diálogos Permiten crear diálogos a la medida public public class class FireMissilesDialogFragment FireMissilesDialogFragment extends extends DialogFragment DialogFragment @Override @Override public public Dialog Dialog oncreatedialog(bundle oncreatedialog(bundle savedinstancestate) savedinstancestate) AlertDialog.Builder AlertDialog.Builder builder builder = new new AlertDialog.Builder(getActivity()); AlertDialog.Builder(getActivity()); builder.setmessage(r.string.dialog_fire_missiles) builder.setmessage(r.string.dialog_fire_missiles).setpositivebutton(r.string.fire,.setpositivebutton(r.string.fire, new new DialogInterface.OnClickListener() DialogInterface.OnClickListener() public public void void onclick(dialoginterface onclick(dialoginterface dialog, dialog, int int id) id) // // FIRE FIRE ZE ZE MISSILES! MISSILES! ) ).setnegativebutton(r.string.cancel,.setnegativebutton(r.string.cancel, new new DialogInterface.OnClickListener() DialogInterface.OnClickListener() public public void void onclick(dialoginterface onclick(dialoginterface dialog, dialog, int int id) id) // // User User cancelled cancelled the the dialog dialog ); ); return return builder.create(); builder.create(); Después basta con instanciar la clase e invocar a show() Mp3Player 22

Diálogos con layout personalizado Se diseñar la apariencia como en cualquier otro layout Se infla pasando al builder el nuevo layout AlertDialog.Builder AlertDialog.Builder builder builder = = new new AlertDialog.Builder(getActivity()); AlertDialog.Builder(getActivity()); LayoutInflater LayoutInflater inflater inflater = = getactivity().getlayoutinflater(); getactivity().getlayoutinflater(); builder.setview(inflater.inflate(r.layout.dialog_signin, builder.setview(inflater.inflate(r.layout.dialog_signin, null)); null)); builder.setmessage(r.string.dialog_fire_missiles) builder.setmessage(r.string.dialog_fire_missiles).setpositivebutton(r.string.fire,.setpositivebutton(r.string.fire, new new DialogInterface.OnClickListener() DialogInterface.OnClickListener()...... Mp3Player 23

Mp3Player: Paso 4 Creación de una instancia del MediaPlayer que inicie la reproducción de una canción fija al pulsar un botón: Añadir un botón al layout del fragmento Crear una instancia estática del MediaPlayer Iniciar la reproducción del MediaPlayer al pulsar el botón Detener la reproducción al abandonar la aplicación (desde el menú) Mp3Player 24

Reproducción de audio y vídeo Se realiza a través del objeto MediaPlayer Permite reproducir: Contenido local URIs internas URLs externas (streaming) Mp3Player 25

MediaPlayer: permisos Hay ciertas características que requieren permisos extras en el Manifest: Internet Permission: para reproducción en stream <uses-permission <uses-permission android:name="android.permission.internet" android:name="android.permission.internet" Wake Lock Permission: para evitar el bloqueo de pantalla o el paso a modo sleep del procesador <uses-permission <uses-permission android:name="android.permission.wake_loc" android:name="android.permission.wake_loc" Mp3Player 26

MediaPlayer Gestión basada en un diagrama de estados Secuencia simple: reset(): paso a estado inicial setdatasource(): elección dela fuente de reproducción prepare(): carga de la fuente start(): inicio de la reproducción pause()/stop(): pausa/parada de la reproducción release(): liberación de recursos del MediaPlayer Mp3Player 27

Mp3Player: Paso 5 Adición de una nueva actividad que proporcionará la canción a reproducir Aunque en eclipse: File=>New=>Other..., existe un wizard que lo hace de forma automática, hazlo manualmente Crea un el layout activity_playlist Crea el fichero fuente con el contenido mínimo: declaración de la clase PlayList (extends Activity), y el método oncreate() Añade la nueva actividad al manifiesto de Mp3Player 28

Intent explícitos Permiten iniciar nuevas actividades Intent Intent i = new new Intent(this, Intent(this, About.class); About.class); Puede contener información adicional: Acción: string para especificar la acción a realizar Datos: para indicar una URI Categoría: del componente que debe gestionar el intent Extras: pares de tipo key-value para envío de información extra A continuación se iniciará la tarea startactivity(i); Mp3Player 29

Intents: Paso de extras Se añaden datos extra al Intent de retorno con métodos especializados: putextra(string clave, <tipo> valor) putstringarraylistextra(string clave, ArrayList<String> valor) Nombre del paquete java como prefijo la clave También puede crearse un objeto Bundle que integre todos los datos y después añadirlo al intent: putextras(bundle extras) Mp3Player 30

Intents con respuesta Si la actividad a ejecutar devuelve resultados, debe iniciarse con startactivityforresult() Primer argumento es el intent. Segundo argumento es el identificador de llamada Además debe implementarse en la actividad el callback onactivityresult(), para recoger los resultados @Override @Override public public void void onactivityresult(int requestcode,int requestcode,int resultcode, resultcode, Intent Intent data data super.onactivityresult(requestcode, resultcode, resultcode, data); data); ; ; switch(requestcode) switch(requestcode) case case (ID_LLAMADA): (ID_LLAMADA): if if (resultcode (resultcode == == Activity.RESULT_OK) Bundle Bundle b = data.getextras(); data.getextras();...... Mp3Player 31

Retorno de valores Desde la actividad llamada Crear un intent de retorno Puede incluir nuevos extras Establecer el resultado actividad: SetResult() Código: e.j. RESULT_CANCELED, RESULT_OK. Intent Intent resultintent resultintent = new new Intent(); Intent(); resultintent.putextra("com.cep.mp3player.song", position); position); setresult(activity.result_ok,resultintent); this.finish(); this.finish(); Mp3Player 32

Mp3Player: Paso 6 Selección de la canción a partir de una lista fija mostrada en la nueva actividad: Añadir al layout de la actividad una ListView (categoría Composite de la paleta de la vista gráfica) con el id song_list Cambiar la herencia de la actividad PlayList de Activity a ListActivity En el método oncreate de la actividad añadir y conectar a la ListView Un array de strings inicializada con 3 nombres de canciones Un adaptador de lista simple Mp3Player 33

Mp3Player: Paso 6...: Añadir el método onlistitemclick() a la actividad para tratar la selección de la lista: Retornar un intent con el número de canción elegida Llamar a finish() para cerrar la actividad Mp3Player 34

Mostrar datos en el ListView La misma filosofía siempre: Desacoplar el contenedor y origen de los datos de la presentación. Datos [Contenedor] Adaptador Control [Presentación] Vista [Visualización a medida] Mp3Player 35

Mostrar datos en ListView (sencillo) 1. El contenedor 2. El adaptador ArrayList<String> songslist=new ArrayList<String>(); ArrayAdapter<String> adapter; Enlazar contenedor-vista-lista-adaptador (oncreate) adapter=new ArrayAdapter<String>(this, android.r.layout.simple_list_item_1,listtareas); setlistadapter(adapter); Añadir datos (onactivityresult) listtareas.add(string); adapter.notifydatasetchanged(); Mp3Player 36

Mp3Player: Paso 7 Creación de la lista de canciones a partir del contenido de un directorio: Obtener la lista de ficheros de un directorio del dispositivo de almacenamiento externo (mediante la clase MediaManager que se proporciona) Enviar la lista de los nombres de canciones a la actividad que la muestra, a través de los argumentos del Intent Recoger la canción seleccionada, obtener el fichero fuente, y reproducir Mp3Player 37

Mp3Player: Paso 8 Mejora de la interfaz de control del player: Adición de 3 botones: Canción anterior Pausa/reproducción Canción posterior Label que muestre la canción que se está reproduciendo actualmente Si la canción elegida en la lista es la que se haya en curso, no reiniciar su reproducción Mp3Player 38

Layouts Arquitectura de la IU en una Activity Estructura de la visualización Contenedor de los elementos visuales Tipo Lineal Table Absolute Relative Frame Descripción Los elementos se ubican en orden. Puede indicarse si horizontalmente o verticalmente. Los elementos se organizan en filas y dentro de cada una, podemos ubicar varios elementos. Se indican las coordenadas exactas donde deben ubicarse los elementos Se especifica una posición relativa a otro elemento o layout Los elementos pueden superponerse. El marco ocupa toda la pantalla. Mp3Player 39

LinearLayout <?xml <?xml version="1.0" version="1.0" encoding="utf-8"?> encoding="utf-8"?> <LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:orientation="vertical" android:layout_width="fill_parent" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:layout_height="fill_parent"> <Button <Button android:text="button01" android:text="button01" android:id="@+id/button01" android:id="@+id/button01" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_height="wrap_content" <Button <Button android:text="button02" android:text="button02" android:id="@+id/button02" android:id="@+id/button02" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_height="wrap_content" </LinearLayout> </LinearLayout> <?xml <?xml version="1.0" version="1.0" encoding="utf-8"?> encoding="utf-8"?> <LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:layout_height="fill_parent"> <Button <Button android:text="button01" android:text="button01" android:id="@+id/button01" android:id="@+id/button01" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_height="wrap_content" <Button <Button android:text="button02" android:text="button02" android:id="@+id/button02" android:id="@+id/button02" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_height="wrap_content" </LinearLayout> </LinearLayout> Fuente: http://www.programacion.com/articulo/introducion_a_los_layouts_para_android_400 Mp3Player 40

TableLayout <?xml <?xml version="1.0" version="1.0" encoding="utf-8"?> encoding="utf-8"?> <TableLayout <TableLayout android:id="@+id/tablelayout01" android:id="@+id/tablelayout01" android:layout_width="fill_parent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android"> <TableRow <TableRow android:id="@+id/tablerow01"> android:id="@+id/tablerow01"> <TextView <TextView android:id="@+id/textview01" android:id="@+id/textview01" android:text="first android:text="first Name:" Name:" android:width="100px" android:width="100px" <EditText <EditText android:id="@+id/edittext01" android:id="@+id/edittext01" android:width="220px" android:width="220px" </TableRow> </TableRow> <TableRow <TableRow android:id="@+id/tablerow02"> android:id="@+id/tablerow02"> <TextView <TextView android:id="@+id/textview02" android:id="@+id/textview02" android:text="second android:text="second Name:" Name:" <EditText <EditText android:id="@+id/edittext02" android:id="@+id/edittext02" </TableRow> </TableRow> <TableRow <TableRow android:id="@+id/tablerow03"> android:id="@+id/tablerow03"> <Button <Button android:id="@+id/button01" android:id="@+id/button01" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_height="wrap_content" android:text="submit" android:text="submit" <Button <Button android:id="@+id/button02" android:id="@+id/button02" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_height="wrap_content" android:text="reset" android:text="reset" android:width="100px" android:width="100px" </TableRow> </TableRow> </TableLayout> </TableLayout> Fuente: http://www.programacion.com/articulo/introducion_a_los_layouts_para_android_400 Mp3Player 41

RelativeLayout <?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/relativelayout01" <RelativeLayout android:id="@+id/relativelayout01" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:id="@+id/textview01" <TextView android:id="@+id/textview01" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="first Name:" android:layout_height="wrap_content" android:text="first Name:" android:width="100px" android:width="100px" <EditText android:id="@+id/edittext01" android:layout_width="220px" <EditText android:id="@+id/edittext01" android:layout_width="220px" android:layout_height="wrap_content" android:layout_height="wrap_content" android:layout_torightof="@+id/textview01" android:layout_torightof="@+id/textview01" android:layout_below="@+id/relativelayout01" android:layout_below="@+id/relativelayout01" <EditText android:id="@+id/edittext02" android:layout_width="220px" <EditText android:id="@+id/edittext02" android:layout_width="220px" android:layout_height="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/edittext01" android:layout_below="@+id/edittext01" android:layout_alignleft="@+id/edittext01" android:layout_alignleft="@+id/edittext01" <TextView android:id="@+id/textview02" <TextView android:id="@+id/textview02" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="second Name:" android:layout_height="wrap_content" android:text="second Name:" android:width="100px" android:layout_below="@+id/edittext01" android:width="100px" android:layout_below="@+id/edittext01" android:layout_toleftof="@+id/edittext02" android:layout_toleftof="@+id/edittext02" <Button android:text="submit" android:id="@+id/button01" <Button android:text="submit" android:id="@+id/button01" android:layout_width="100px" android:layout_height="wrap_content" android:layout_width="100px" android:layout_height="wrap_content" android:layout_below="@id/edittext02" android:layout_below="@id/edittext02" android:layout_alignleft="@id/edittext02" android:layout_alignleft="@id/edittext02" <Button android:text="reset" android:id="@+id/button02" <Button android:text="reset" android:id="@+id/button02" android:layout_width="100px" android:layout_height="wrap_content" android:layout_width="100px" android:layout_height="wrap_content" android:layout_below="@id/edittext02" android:layout_below="@id/edittext02" android:layout_alignright="@id/edittext02" android:layout_alignright="@id/edittext02" </RelativeLayout> </RelativeLayout> Fuente: http://www.programacion.com/articulo/introducion_a_los_layouts_para_android_400 Mp3Player 42

AbsoluteLayout <?xml <?xml version="1.0" version="1.0" encoding="utf-8"?> encoding="utf-8"?> <AbsoluteLayout <AbsoluteLayout android:id="@+id/absolutelayout01" android:id="@+id/absolutelayout01" android:layout_width="fill_parent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android"> <EditText <EditText android:id="@+id/edittext01" android:id="@+id/edittext01" android:layout_width="200px" android:layout_width="200px" android:layout_height="wrap_content" android:layout_height="wrap_content" android:layout_x="12px" android:layout_x="12px" android:layout_y="12px" android:layout_y="12px" <Button <Button android:text="search" android:text="search" android:id="@+id/button01" android:id="@+id/button01" android:layout_width="100px" android:layout_width="100px" android:layout_height="wrap_content" android:layout_height="wrap_content" android:layout_x="220px" android:layout_x="220px" android:layout_y="12px" android:layout_y="12px" </AbsoluteLayout> </AbsoluteLayout> Fuente: http://www.programacion.com/articulo/introducion_a_los_layouts_para_android_400 Mp3Player 43

FrameLayout <?xml <?xml version="1.0" version="1.0" encoding="utf-8"?> encoding="utf-8"?> <FrameLayout <FrameLayout android:id="@+id/framelayout01" android:id="@+id/framelayout01" android:layout_width="fill_parent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView <ImageView android:id="@+id/imageview01" android:id="@+id/imageview01" android:src="@drawable/android" android:src="@drawable/android" android:layout_width="fill_parent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_height="fill_parent" android:scaletype="center" android:scaletype="center" <TextView <TextView android:text=" android:text=" Partaker" Partaker" android:id="@+id/textview01" android:id="@+id/textview01" android:layout_width="wrap_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_height="wrap_content" android:layout_marginbottom="20dip" android:layout_marginbottom="20dip" android:layout_gravity="center_horizontal bottom" android:layout_gravity="center_horizontal bottom" android:padding="10dip" android:padding="10dip" android:textcolor="#aa0000" android:textcolor="#aa0000" android:textstyle="bold" android:textstyle="bold" android:textsize="20px" android:textsize="20px" android:background="#00000000" android:background="#00000000" </FrameLayout> </FrameLayout> Fuente: http://www.programacion.com/articulo/introducion_a_los_layouts_para_android_400 Mp3Player 44