Android Basics v2.0
-
Upload
jesus-fontecha -
Category
Technology
-
view
2.764 -
download
6
description
Transcript of Android Basics v2.0
1
University of Castilla-La Mancha, SpainMAmI Research Lab
AndroidQuick Start v2.0
Jesús Fontecha Diezma
2
Introducción
• SSOO de Google• Diseñado para ser ejecutado en dispositivos móviles.• Origen: 2007 Open Handset Alliance (OHA)
• Basado en el Kernel de Linux• Permite ejecutar aplicaciones en Java + XML
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
3
Actividades
• Activity• El más importante• Representa una pantalla individual• Presenta una interfaz gráfica al usuario
Agenda telefónica
public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState);
protected void onStart(); protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy(); }
Activity 1
Activity 2
Información detallada del contacto
Listado de nombres y teléfonos
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
4
Ciclo de vida
(Clases que exti
enden de Activit
y)
Cuando es visible
Primera vez
Cuando se oculta
Asignación de memoria
Finaliza
Otra actividad en primer plano
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
5
Services y Broadcast Receivers
• Services• No tiene interfaz gráfica• Puede ejecutarse en background (= demonio Linux)
• Broadcast receivers• No tienen interfaz gráfica• Detecta y reacciona ante mensajes o eventos del
sistema Notificaciones broadcast.
Capturar posición GPSCapturar datos acelerómetro
Batería Baja Llamada Cambio zona horariaTarjeta SD Otras aplicaciones
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
6
Intents y Views
• Intents• Elemento básico de comunicación
• Variables/objetos entre componentes• Definen “qué se debe hacer”
Mostrar una actividad desde otra
Iniciar un servicio
Enviar mensaje broadcast Iniciar otra aplicación
• Views• Componentes básicos para la construcción de la UI• Análogo a los controles de Java o .NET
Cuadros de texto BotonesListas
desplegables ImágenesBarras de desplazamiento
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
7
Content Providers y Widgets
• Content providers• Mecanismos para compartir
datos entre aplicaciones.• Podemos acceder a datos de
otras aplicacionesMi
Agenda
Agenda del sistema
•Widgets• Elementos visuales e
interactivos• Se muestran en la pantalla
principal del terminal
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
8
Fragmentos
• Y a partir de Android 3.0 ¡Fragments!• Solución a la “fragmentación mala”.
Más de 4000 dispositivos Android: “muchas resoluciones, muchos tamaños” Argh!!
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
9
Fragmentos
• ¿Qué supone?• En aplicaciones antiguas:
• Uso de librerías de apoyo a la compatibilidad (support libraries).
• Reescritura de clases • En aplicaciones nuevas:
• Versatilidad: Misma app compatible para cualquier dispositivo.
• Aumentar la importancia del diseño de las actividades. Más difícil diseñar una buena app.
• Reutilización de fragmentos.• Cambian “un poco” aspectos iniciales de las actividades.
Actividades compuestas por componentes vs Actividades compuestas por fragmentos
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
10
Patrones de Diseño
• Objetivo• Unificar y mejorar la apariencia de la interfaz gráfica• http://www.androidpatterns.com/• Dashboards, listas, pestañas, menús, etc.
“No es una obligación, pero sí una recomendación”
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
11
Barras de acción
• Action Bar• Similar a una barra de tareas• Permite agrupar acciones• De acceso intuitivo y rápido
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
12
Ejemplo: Comparación (I)
• Misma Aplicación, diferentes dispositivos
Galaxy tab 10”
Galaxy S
Activ
idad
Frag
men
tos
Posibles transiciones
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
13
Ejemplo: Comparación (II)
• Misma Aplicación, mismo dispositivo, diferente orientación
Más trabajo de diseño, pero… • ¡Reutilizamos código!• ¡La aplicación se adapta a cualquier dispositivo Android!
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
14
Desarrollo con Android
• ¿Qué necesitamos?
DVM
Librerías
EmuladorSDK
IDE
Conocimientos Java
PC
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
15
SDK ANDROID (sobre Eclipse)
1. Instalar Eclipse2. Instalar SDK Android
http://developer.android.com/sdk/index.html• Instalar las librerías necesarias
3. Añadir un AVD – SDK Manager• Tools > Manage AVDs > New• Definir características y crear
4. Configurar Plugin ADT - Eclipse• Help > Install New Software• Introducir url proveedor: https://dl-ssl.google.com/android/eclipse/
5. ¡Ya podemos crear nuestro primer proyecto!
También se puede instalar en otros IDEs - Netbeans (ver Android Basics v.1)
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
16
Modelo Vista Controlador
• La separación de lógica e interfaz favorece la aplicación del patrón Modelo-Vista-Controlador (MVC)
ModeloVista
Controlador
- Interfaz de usuario
-Representación de la información
-Responsable de eventos- Lógica tras la interacción del usuario
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
17
Primeros Pasos1. New Project > Android Application
Project2. Definir las propiedades iniciales de la
App• Nombre• SDK desarrollo• Mínimo SDK requerido• Icono de aplicación• Actividad inicial (opcional)
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
18
¿Qué es todo esto?
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
19
Estructura de directorios
• /src – Clases java y archivo R.java• R.java: Autogenerado por Android (vbles. sistema)
• /res/drawable – Imágenes de la aplicación y recursos XML• Posibles subdirectorios
• /res/layout – Vistas de la aplicación en XML• Posibles subdirectorios
• /res/values – Archivos XML con las variables de la aplicación
• Libraries – El IDE referencia al SDK de Android• AndroidManifest.xml – Archivo de manifiesto
• Define todas las actividades, servicios,…• Define la configuración del proyecto
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
20
Ejemplo de Manifiesto
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
21
Vista de diseño
Views/Componentes Área de trabajo
Jerarquía Layouts-
Componentes
Propiedades Componente selección
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
22
Layouts (I)
• Layouts. Distribución de componentes en pantalla
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<Button android:text="Button01" android:id="@+id/Button01" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button android:text="Button02" android:id="@+id/Button02" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>
Linear Layout
<?xml version="1.0" encoding="utf-8"?> <TableLayout android:id="@+id/TableLayout01"
android:layout_width="fill_parent" android:layout_height="fill_parent“xmlns:android="http://schemas.android.com/apk/res/android">
<TableRow android:id="@+id/TableRow01"> <TextView android:id="@+id/TextView01" android:text="First Name:" android:width="100px" /> <EditText android:id="@+id/EditText01" android:width="220px" />
…<TableRow android:id="@+id/TableRow03">
<Button android:id="@+id/Button01“ … android:layout_height="wrap_content" android:text="Submit" /> <Button android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_...
</TableRow> </TableLayout>
Table Layout
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
23
Layouts (II)<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/RelativeLayout01"
android:layout_width="fill_parent“ android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:id="@+id/TextView01 … /> <EditText android:id="@+id/EditText01" android:layout_width="220px“ …
android:layout_toRightOf="@+id/TextView01" android:layout_below="@+id/RelativeLayout01" />
<EditText android:id="@+id/EditText02" … android:layout_below="@+id/EditText01" android:layout_alignLeft="@+id/EditText01" />
<TextView android:id="@+id/TextView02" android:layout_width=…
<Button android:text="Submit" android:id="@+id/Button01” …android:layout_below="@id/EditText02" android:layout_alignLeft="@id/EditText02" /> <Button android:text="Reset" android:id="@+id/Button02“ … android:layout_below="@id/EditText02" android:layout_alignRight="@id/EditText02" />
</RelativeLayout>
Relative Layout
<?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/AbsoluteLayout01"
android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<EditText android:id="@+id/EditText01" android:layout_width="200px" android:layout_height="wrap_content" android:layout_x="12px" android:layout_y="12px" />
<Button android:text="Search" android:id="@+id/Button01" android:layout_width="100px" android:layout_height="wrap_content" android:layout_x="220px" android:layout_y="12px" />
</AbsoluteLayout>
Absolute Layout
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
24
Layouts (III)<?xml version="1.0" encoding="utf-8"?> <FrameLayout android:id="@+id/FrameLayout01" android:layout_width="fill_parent"
android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:id="@+id/ImageView01" android:src="@drawable/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="center" />
<TextView android:text="Android Partaker" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dip" android:layout_gravity="center_horizontal|bottom" android:padding="10dip" android:textColor="#AA0000" android:textStyle="bold" android:textSize="20px" android:background="#00000000" />
</FrameLayout>
Frame Layout
Source: http://androidpartaker.wordpress.com/2010/07/03/introduction-to-android-ui-layouts/
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
25
Vistas Actividad
MainActivity.javaIntroducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
26
Fragmento en Actividad
Fragmento.java
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
27
Procedural vs Declarativo
Archivo JavaTextView tv= new TextView(this)tv.setWidth(100);tv.setHeight(60);tv.setText("phone"); setContentView(tv);
Archivo XML<TextView android:id="@+id/nameLabel" android:text="phone:" android:layout_width="100" android:layout_height="60"/>
• Ejemplo: Programación de un componente
• Vale, entonces… ¿Cómo lo hago? Depende• Recomendación: Declarar XML siempre que se pueda• ¡En layouts siempre!
¿Seguimos con algo de programación?
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
28
Eventos sobre componentes (I)
• Handlers• Maneja eventos de entrada sin importar dónde está el foco.• No están necesariamente asociados a un view.• Botón atrás, tocar pantalla,…
• Listeners• Maneja eventos generados por un view o viewgroup.
Views
EventosIntroducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
29
Eventos sobre componentes (II)
• Button
“Android recomienda que la actividad implemente la interfaz onXXXListener en lugar de usar clases anónimas”
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
30
Eventos sobre componentes (III)
• EditText
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
31
Eventos sobre componentes (IV)
• ImageView
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
32
Eventos sobre componentes (V)
• CheckBox
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
33
• Más Eventos• onLongClick, onFocusChange, onTouch, onKeyDown, onKeyUp,…
• Más Componentes• Texto TextView, AutocompleteTextView,…• Botón ImageButton, TogleButton, RadioButton,…• Vistas compuestas ExpandableListView, Listview…• Barras ProgressBar, SeekBar, RatinBar,…
ListItem
¿Cómo lleno la lista?
Eventos sobre componentes (VI)
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
34
Adaptadores (I)
• ¿Qué es?• Objeto que proporciona una interfaz común para cada modelo de
datos detrás de un control de selección.
• Tipos• ListAdapter• ArrayAdapter• SpinnerAdapter• SimpleCursorAdapter• CustomAdapters
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
35
Adaptadores (II)
• Ejemplo
//Creamos el adaptador ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.comidas,android.R.layout.simple_spinner_item); //Añadimos el layout para el menú adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //Le indicamos al spinner el adaptador a usar prueba.setAdapter(adapter);
¡Los datos no tienen porque proceder de recursos estáticos!
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="comidas"> <item>Salchichas</item> <item>Huevos</item> <item>Tomates</item> </string-array> </resources>
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
36
Eventos sobre elementos Hw
• Interfaz SensorEventListener
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);List<Sensor> listSensors = mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
http://developer.android.com/reference/android/hardware/Sensor.html
• Sensores
Recuperamos el sensor
onSensorChanged()Método
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
37
Más sobre Actividades y Fragmentos• Tipos de Actividades y Fragmentos
• ListActivity Diseñada especialmente para trabajar con ListViews.• ListFragment Idem.• Alguna más: TabActivity.• ¡Los fragmentos se “inflan” dentro de las actividades!
• Intents• Objetos utilizados para enviar mensajes asíncronos dentro de una
aplicación o entre varias aplicaciones.• Posibilitan la transición entre actividades.• Permiten la comunicación entre componentes.
http://androideity.com/2011/10/17/trabajando-con-intents-en-android-overview/
View view = inflater.inflate(R.layout.fragment_edit_name, container);
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
38
Intents y Bundles (I)
• Bundle• Contenedor para agrupar los datos. • Pueden ser usados conjuntamente con Intents.
• Ejemplo IntentIntent intent = new Intent();intent.setClass(getActivity(), NuevaActividad.class);intent.putExtra("identificador", id);intent.putExtra("nombre", nombre);startActivity(intent);
String id = getActivity().getIntent().getStringExtra("identificador");String nombre = getActivity().getIntent().getStringExtra("nombre");
Actividad 1 Actividad 2
identificador
nombre
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
39
Intents y Bundles (II)
• Ejemplo Bundle
Bundle extras = intent.getExtras();String key = extras.getString("mynkey");
Bundle b=new Bundle();b.putString("myname", nombre);
¡también podemos pasar objetos!
Serializable ParcelableIntroducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
• ¡Hay mucho más! Evolución constante• Nuevos firmwares• Nuevas funciones
¡Esto sólo ha sido el comienzo de una ¿gran? amistad!
40
Ejecución de aplicaciones
Dispositivos conectados
Emuladores
Dalvik Virtual Machine (DVM)
!NO OLVIDES LA DEPURACIÓN!
Poner en modo depuracion
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
41
Uso de Librerías
• Hay librerías para todo y para todos• Almacenamiento de datos (SQLite)• Bibliotecas de medios• Bibliotecas gráficas (2D y 3D –OpenGL)• Servicios Web (Ksoap)• Mapas (API Google Maps)• …¡y muchas más!
REFERENCIA: http://developer.android.com/index.html
Introducción a Android Elementos Ciclo de vida: Activity Patrones de diseñoDesarrollo con Android Entorno de trabajo SDK Android MVC Primeros Pasos Views y Eventos Adaptadores Intents y Bundles Ejecurión y Depuración Librerías
42
Jesús Fontecha DiezmaAndroid Quick Start V2.0