0% encontró este documento útil (0 votos)
190 vistas198 páginas

Curso Completo de Desarrollo Android

El documento presenta un plan de estudios para un curso de introducción a Android dividido en 6 sesiones. Cada sesión cubre uno o más temas clave como la historia de Android, el entorno de desarrollo Android Studio, actividades, interfaces de usuario, almacenamiento y más. Incluye objetivos de aprendizaje para cada sesión y una breve descripción de cada tema.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
190 vistas198 páginas

Curso Completo de Desarrollo Android

El documento presenta un plan de estudios para un curso de introducción a Android dividido en 6 sesiones. Cada sesión cubre uno o más temas clave como la historia de Android, el entorno de desarrollo Android Studio, actividades, interfaces de usuario, almacenamiento y más. Incluye objetivos de aprendizaje para cada sesión y una breve descripción de cada tema.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Ing. Alex Jiménez.

Alex.J2k@[Link]
Contenido
Sesión Tema Sub Tema

Sesión 1 1. Introducción a Android Historia, Versionamientos, Arquitectura, Fundamentos, Componentes.

2. Entorno de desarrollo Instalación de Android Studio, Creación de un proyecto, Estructura de un proyecto, Configuración de
emuladores, Ejecución de App en emulador, Ejecución de App en dispositivo físico.
Sesión 2 3. Recursos Android Recursos internos, Recursos del sistema

4. Soporte a diferentes dispositivos Idiomas y culturas, Tamaños de pantallas, Versiones de Android.

5. Actividades Ciclo de vida, Intenciones y filtros, Interacción con otras actividades, Interacción con otras aplicaciones.
Sesión 3 6. Interfaces de usuario Views (Componentes más utilizados)
Layouts (Tipos)

7. Estilos y Temas Definición y atributos, Herencia, Temas.


Sesión 4 8. Listas y adaptadores Listas simples, listas múltiples, listas personalizadas.

9. Multimedia Fotos y Videos


Sesión 5 10. Menús Definición de menús en formato xml, Definición de menús con código, Menús contextuales.

11. Cuadros de diálogo AlertDialog, TimePickerDialog, DatePickerDialog


Sesión 6 12. Almacenamiento Preferencias, memoria interna, memoria externa.

2
Sesión 1.
Objetivos.

1. Conocer los fundamentos del entorno de desarrollo Android.


2. Identificar los componentes de una aplicación Android.
3. Conocer la forma de preparar el entorno de desarrollo con Android Studio.
4. Explorar el entorno de de desarrollo.
5. Aprender a configurar un emulador para probar aplicaciones.
6. Crear una aplicación básica para ejecutarla en un emulador/dispositivo físico.

3
Breve Historia.
Android
Sistema operativo basado en Linux, diseñado principalmente para móviles con pantalla táctil
como teléfonos inteligentes o tabletas inicialmente desarrollados por Android, Inc., que
Google respaldó financieramente y más tarde compró en 2005.

4
Versionamientos

5
Distribución según versiones

6
Arquitectura

7
Fundamentos
 Las herramientas de Android SDK generan un archivo .apk.
 Un APK tiene archivos de recursos y datos (paquete de Android)

Una vez instalada en el dispositivo, cada aplicación de Android se aloja en su propia zona de pruebas
de seguridad:
 El sistema operativo Android es un sistema Linux multiusuario en el que cada aplicación es un usuario
diferente.
 De forma predeterminada, el sistema le asigna a cada aplicación una ID de usuario de Linux única
(solo el sistema utiliza la ID y la aplicación la desconoce). El sistema establece permisos para todos los
archivos en una aplicación de modo que solo el ID de usuario asignado a esa aplicación pueda
acceder a ellos.
 Cada proceso tiene su propio equipo virtual (EV), por lo que el código de una aplicación se ejecuta de
forma independiente de otras aplicaciones.
 De forma predeterminada, cada aplicación ejecuta su proceso de Linux propio.

8
Componentes.
Componente Descripción Clase y etiqueta para declarlo en
archivo de manifiesto.

Actividades (Activity) Una actividad representa una pantalla con interfaz de usuario. Activity
Ej. App de correo, App de contactos, etc. <activity>

Servicios (Service) Un servicio es un componente que se ejecuta en segundo plano para realizar Service
operaciones prolongadas o tareas para procesos remotos. Un servicio no <service>
proporciona una interfaz de usuario. Por ejemplo, un servicio podría reproducir
música en segundo plano mientras el usuario se encuentra en otra aplicación

Proveedores de contenido Un proveedor de contenido administra un conjunto compartido de datos de la ContentProvider


(ContentProvider) app. Puedes almacenar los datos en el sistema de archivos, en una base de datos <provider>
SQLite, en la Web o en cualquier otra ubicación de almacenamiento persistente a
la que tu aplicación pueda acceder. A través del proveedor de contenido, otras
aplicaciones pueden consultar o incluso modificar los datos (si el proveedor de
contenido lo permite)
Receptores de mensajes Un receptor de mensajes es un componente que responde a los anuncios de BroadcastReceiver
(BroadcastReceiver) mensajes en todo el sistema. Muchos mensajes son originados por el sistema; por <receiver>
ejemplo, un mensaje que anuncie que se apagó la pantalla, que la batería tiene
poca carga o que se tomó una foto. Las aplicaciones también pueden iniciar
mensajes; por ejemplo, para permitir que otras aplicaciones sepan que se
descargaron datos al dispositivo y están disponibles para usarlos.

9
Ciclo de vida de una Activity

10
Archivo de manifiesto : [Link]
Toda aplicación debe tener un archivo [Link] en la raíz del proyecto.
Proporciona información esencial sobre tu aplicación:

 Nombra el paquete de Java para la aplicación. El nombre del paquete sirve como un identificador único
para la aplicación.
 Describe los componentes de la aplicación.
 Declara los permisos debe tener la aplicación para acceder a las partes protegidas de una API e
interactuar con otras aplicaciones. También declara los permisos que otros deben tener para interactuar
con los componentes de la aplicación.
 Declara el nivel mínimo de Android API que requiere la aplicación.
 Enumera las bibliotecas con las que debe estar vinculada la aplicación.

11
Estructura de archivo de
manifiesto.

12
Android Studio.
Android Studio es el entorno de desarrollo integrado (IDE) oficial para el
desarrollo de aplicaciones para Android y se basa en IntelliJ IDEA.
Algunas funciones elementales:

1. Sistema de compilación basado en Gradle.


2. Un emulador con varias funciones
3. Un entorno unificado en el que puedes realizar desarrollos para todos los
dispositivos Android
4. Instant Run para aplicar cambios mientras tu app se ejecuta sin la necesidad
de compilar un nuevo APK
5. Integración de plantillas de código y GitHub para ayudarte a compilar
funciones comunes de las apps e importar ejemplos de código
6. Compatibilidad con C++ y NDK
7. Soporte incorporado para Google Firebase.
13
Android Studio.
Requerimientos de Software:
 Java-SDK
 Android Studio
 Android-SDK
Requerimientos de Hardware (Recomendados):
Característica Windows Mac Linux
Versión del S.O. Windows 7/8/10 (32 o 64 bits) Mac OS X 10.8.5 o superior. GNOME o KDE Desktop.
Ubuntu…
Memoria RAM 3 GB de RAM (8 GB de RAM 3 GB de RAM (8 GB de RAM 3 GB de RAM (8 GB de RAM
recomendado). 1 GB para recomendado). 1 GB para recomendado). 1 GB para
emulador. emulador. emulador.
Espacio libre en Disco Duro 20 GB de espacio libre mínimo 20 GB de espacio libre mínimo 20 GB de espacio libre mínimo (35
(35 GB recomendado). (35 GB recomendado). GB recomendado).
Resolución de pantalla Resolución mínima de 1.280 x Resolución mínima de 1.280 x Resolución mínima de 1.280 x
800. 800. 800.
Procesador Procesador Intel . Procesador Intel . Procesador Intel .
14
Instalación de Android Studio
1- Ingresar a [Link]/studio/index y descargar Android Studio

[Link] 15
Instalación de Android Studio
2- Ejecutar archivo de instalación

16
Instalación de Android Studio
3- Seleccionar “Next” para iniciar instalación

17
Instalación de Android Studio
4- Seleccionar “Next” teniendo seleccionados los componentes a instalar.

18
Instalación de Android Studio
5- Seleccionar “I Agree”

19
Instalación de Android Studio
6- Seleccionar ubicación para instalar Android Studio y su respectiva ubicación de los sdk, luego
seleccionar “Next”

20
Instalación de Android Studio
7- Seleccionar “Next”

21
Instalación de Android Studio
8- Seleccionar “Install”

22
Instalación de Android Studio
9- Esperar proceso de instalación

23
Instalación de Android Studio
10- Al completar proceso, seleccionar “Next”

24
Instalación de Android Studio
11- Proceso completado, seleccionar “Finish”

25
Configuración de Android Studio
1- Configuración inicial, selecionar “Next”

26
Configuración de Android Studio
2- Seleccionar “Standard”y luego selecionar “Next”

27
Configuración de Android Studio
3- Actualización de la última versión de API de Android, Seleccionar “Accept” y luego “Finish”

28
Configuración de Android Studio
4- Esperando descarga de actualización…

29
Configuración de Android Studio
5- Actualización finalizada, selecionar “Finish”

30
Configuración de Android Studio
6-Esperando creación automática de primer dispositivo virtual (Emulador)

31
Configuración de Android Studio
7- Dispositivo virtual creado, seleccionar “Finish”

32
Comprobación de instalación
Buscar acceso en menú principal:

33
Comprobación de instalación
Acceso inicial

34
Actualizando el SDK de Android
Seleccionar opciones Tools->Android -> SDK Manager

35
Creación de un proyecto.

 Haciendo uso de la pantalla de


inicio de Android Studio:
1. Selecciona la opción “Start a new
Android Studio Project”.
2. Escribe el nombre de la aplicación. Ej.
My Application
3. Escribe el nombre del dominio o
paquete principal de tu aplicación. (Este
será el ID de tu aplicación cuando llegue
el momento de distribuirla a los
clientes). Ejemplo
[Link].proyecto1
4. Escribe la ruta donde se guardará el
proyecto. (Se creará un carpeta con el
nombre del proyecto y ésta contendrá
sub carpetas y archivos relacionados al
proyecto)
5. Selecciona la opción “Next”.

36
Creación de un proyecto.

Selecciona la(s) plataforma(s) para la(s)


cuale(s) tu App será compatible.
6. Selecciona para éste ejemplo :
Phone and Tablet.
7. Selecciona la version de API
minima que deben cumplir los
dispositivos que usarán ésta App.
Selecciona la API 19.
8. Selecciona “Next”

37
Creación de un proyecto.
9. Ahora puedes
seleccionar una de las
plantillas que se
muestran para ahorrar
tiempo en
codificación.
Seleciona la plantilla
“Empty Activity”. Y
luego selecciona
“Next”

38
Creación de un proyecto.
10. Se te solicitará la configuración para
la primera actividad.
a) Puedes dejar el nombre por defecto :
MainActivity
b) Se solicita el nombre de un archivo
conocido como layout. Deja el
nombre por defecto: activity_main
Éste archivo contiene la definición del
diseño de pantalla que utilizará la
actividad.
11. Selecciona la opción “Finish” y espera
un momento.
Cuando te encuentras dentro de
Android Studio también
puedes seleccionar las
opciones de menu :
File->New->New Project…

39
Estructura de un proyecto Android .
Cada proyecto en Android Studio contiene uno o más módulos con archivos de
código fuente y archivos de recursos. Entre los tipos de módulos se incluyen los
siguientes:
 módulos de apps para Android
 módulos de bibliotecas
 módulos de Google App Engine

Todos los archivos de compilación son visibles en el nivel superior de Secuencias de


comando de Gradle y cada módulo de la aplicación contiene las siguientes
carpetas:
 manifests: contiene el archivo [Link].
 java: contiene los archivos de código fuente de Java, incluido el código de prueba
JUnit.
 res: Contiene todos los recursos, como diseños XML, cadenas de IU e imágenes de
mapa de bits.

40
Estructura de un proyecto Android .

41
Estructura de un proyecto Android .

42
Emulador
Un Android Virtual Device (AVD) permite definir las características de un teléfono Android, una
tablet, o un dispositivo Android Wear o Android TV que desees simular .

 Un AVD contiene un perfil de hardware, una imagen de sistema, un área de almacenamiento y una máscara, entre
otras propiedades.

 Es posible redefinir e importar perfiles de hardware cuando sea necesario.

 El Administrador de AVD te permite elegir una imagen de sistema


Ten en cuenta que las imágenes de sistema x86 se ejecutan de manera más rápida en el emulador.

 El AVD tiene un área dedicada al almacenamiento en tu equipo de desarrollo. Almacena los datos del usuario del
dispositivo, como las apps y las configuraciones instaladas, así como también una tarjeta SD emulada.

 Una máscara de emulador especifica la apariencia de un dispositivo. El Administrador de AVD proporciona algunas
máscaras predefinidas. También puedes definir tus propias máscaras o usar máscaras proporcionadas por
terceros.
43
Emulador
Para crear uno selecciona las opciones Tools->Android -> AVD Manager

44
Emulador
Selecciona el tipo
de hardware .

45
Emulador
Selecciona la imagen del
sistema (Versión de
Android).

46
Emulador
Modifica las propiedades
Del AVD.

Por último selecciona


“Finish”

47
Emulador.
Ejecución.

48
Ejecución de App.
Ejecutación en un dispositivo real
Configura tu dispositivo de la siguiente manera:
1. Conecta tu dispositivo a tu máquina de desarrollo con un cable USB. Si estás desarrollando en Windows,
es posible que necesites instalar el controlador USB adecuado para tu dispositivo. Para obtener ayuda
para instalar los controladores, consulta el documento Controladores OEM USB.
([Link]

2. Habilita USB debugging en el dispositivo. Para ello, dirígete a Settings > Developer options.
Nota: En Android 4.2 y versiones posteriores, Developer options está oculto de manera predeterminada.
Para que esté disponible, dirígete a Settings > About phone y presiona Build number siete veces.
Cuando regreses a la pantalla anterior, verás Developer options.

Ejecuta la app desde Android Studio de la siguiente manera:


1. En Android Studio, selecciona tu proyecto y haz clic en Run en la barra de herramientas.
2. En la ventana Select Deployment Target, selecciona tu dispositivo, y haz clic en OK.
3. Android Studio instala la app en tu dispositivo conectado y lo inicia

49
Ejecución de App.
Ejecutación en un emulador.

Con un emulador activo, ejecuta la app desde Android Studio de la siguiente manera:

1. En Android Studio, selecciona tu proyecto y haz clic en Run en la barra de herramientas.


2. En la ventana Select Deployment Target, selecciona tu emulador y haz clic en OK.
3. El emulador puede tardar unos minutos en iniciarse (La primera vez). Es posible que tengas que
desbloquear la pantalla. Cuando lo haces, aparece Tu App en la pantalla del emulador.

50
Primer proyecto Android

DEMOSTRACION

51
Segundo proyecto Android

Elaborar la sig. Interfaz de usuario y definir


el código necesario para que sea funcional

DEMOSTRACION

52
Tercer proyecto Android
Elaborar la sig. Interfaz de usuario y
definir el código necesario para que sea
funcional

DEMOSTRACION

53
Recursos del proyecto y del sistema.

Ing. Alex Jiménez.


Alex.J2k@[Link]
Sesión2
Objetivos
 Conocer que son los recursos.
 Identificar los 2 tipos de recursos en Android
 Conocer como incorporar recursos alternos de una App
 Conocer como brindar soporte a diferentes dispositivos.
 Idiomas y culturas
 Tamaños y resoluciones de pantallas
 Versiones de Android.

55
Recursos
Archivos que forman parte de un proyecto como: Imagenes, layouts, listas de valores, menús, videos,
sonido, archivos de texto, animaciones, estilos, etc.

1. Recursos de proyecto (Residen dentro del proyecto)

a) Recursos predeterminados

b) Recursos alternativos

2. Recursos del sistema (Son parte del sistema operativo) mantienen


compatibilidad con las diferentes versiones del sistema operativo.
56
Recursos del proyecto
Colocar cada tipo de recurso en un subdirectorio específico del Directorio res/ de tu
proyecto. Por ejemplo, a continuación se muestra la jerarquía de archivos de un proyecto
simple:
Cada vez que incorporas un recurso en la
carpeta res, existe un clase llamada [Link]
que es actualizada automáticamente acorde
a la lista de recursos que contiene.

A través de ésta clase podemos usar los


recursos desde el código de nuestras Apps.

[Link]

57
Tipos de recursos del proyecto
Carpeta Descripción breve
(identificador con clase R)
res/drawable Archivos de mapas de bits (.png, .[Link], .jpg, .gif) o archivos XML que se han compilado en los siguientes subtipos de recursos de
[Link] elemento de diseño: Archivos de mapas de bits, Nine patchs (mapas de bits reajustables), Listas de estados, Formas, Elementos
de diseño de animaciones, Otros elementos de diseño
res/layout Archivos XML que contienen layouts.
[Link]
res/menu Archvios XML con descriptores de menús que podemos usar en nuestra aplicación.
[Link]
res/anim Archivos XML que permite definir una animación con interpolación de movimientos.
[Link]
res/animator Archivos XML que permiten modificar las propiedades de objetos a lo largo del tiempo.
[Link]
res/xml Otros archivos XML como archivos de preferencias.
[Link]
res/raw Archivos de Audio, video, texto, etc.
[Link]
res/values Archivos XML que definen un determinado valor para referencias un color, estilo, cadena.

58
Tipos de recursos en la carpeta values
Archivos Descripción breve
(identificador)

[Link] Identifica cadenas de caracteres


[Link] <string name=“hola”>Hola mundo</string>
[Link] Colores definidos en formato ARGV
[Link] Los valores se indican en hexadecimal en los formatos #RGB, #ARGB, #RRGGBB ó #AARRGGBB
<color name=”verde_opaco”>#0f0</color>
<color name=“Rojo_translucido”>#80ff0000</color>
[Link] Un número seguido de una unidad de medida
[Link] px – pixeles, mm – milímetros, in – pulgadas, pt – puntos
dp – pixeles independientes de la densidad.
<dimen name=“alto”>2.2mm</dimen>
<dimen name=“tamaño_fuente”>16dp</dimen>

59
Tipos de recursos en la carpeta values
Archivos Descripción breve
(identificador)
[Link] Serie de atributos que pueden ser aplicados a una vista o actividad. Si se aplican a una actividad se conocen como
[Link] temas.
<style name=“TextoGrande” parent=“@style/Text”>
<item name=“android:textSize”>20pt</item>
<item name=“android:textColor”>#000080</item>
</style>
[Link] Define un valor entero
<integer name=“edad”>20</integer>
[Link] Define un valor booleano
<bool name=“continuar”>true</bool>
[Link] Define un identificador único de recurso.
<item type=“id” name=“boton_ok” />
<item type=“id” name=“txtNombre” />

60
Tipos de recursos en la carpeta values
Archivos Descripción breve
(identificador)

[Link] Una serie ordenada de elementos. Pueden ser strings, enteros o de recursos (TypedArray)
<string-array name= “dias_semana”>
<item>lunes</item>
<item>martes</item>
</string-array>

<integer-array name= “meses”>


<item>1</item> <item>2</item><item>3</item>
</integer-array>

<array name= “fotos”>


<item>@drawable/foto1</item>
<item>@drawable/foto2</item>
</array>

61
Acceso a los recursos
Desde un archivo XML
<ImageView
android:layout_height=“@dimen/alto”
android:layout_widtht=“fill_parent”
android:background=“@drawable/imagen1”
android:text=“@string/saludo”
android:text_color=“@color/azul” />

Desde código :
Resources res = getResources();
Drawable dibujo = [Link]([Link].imagen1);
String saludo = [Link]([Link]);
int color = [Link]([Link]);
float tam_fuente = [Link]([Link].tamano_fuente);
int edad = [Link]([Link]);
boolean sino = [Link]([Link]);

62
Acceso a los recursos
Desde código :
String[] dias = [Link]([Link].dias_semana);
int[] meses = [Link]([Link]);
TypedArray fotos = [Link]([Link]);
Drawable foto = [Link](0);

63
Recursos del sistema

Ventajas:
1. No consumen memoria en nuestra aplicación.
2. Los usuarios estan familiarizados con ellos.
Ej. [Link].ic_menu_edit
3. Estan acorde a cada version de Android.
Ej. [Link].Teme_Panel
4. Se adaptan a configuracion es locales.
Ej. [Link]

Forma de accederlos :
Drawable icono = “@android:drawable/ic_menu_edit”

App recomendada para ver lista de recursos del sistema : Android.R

64
Recursos alternativos.
Utilizados para admitir configuraciones de dispositivos específicos.
Ej.: densidades de pantallas y recursos de strings alternativos para diferentes idiomas.

En tiempo de ejecución, Android detecta la configuración del dispositivo actual y carga los recursos adecuados para tu
aplicación.

Para especificar alternativas para configuraciones específicas para un conjunto de recursos:


Crea en res/ un nuevo directorio cuyo nombre lleve la forma : <resources_name>-<config_qualifier>.

<resources_name> es el nombre del directorio de los recursos predeterminados correspondientes


< config_qualifier > es un nombre que especifica una configuración individual para la cual se deben usar estos
recursos

Puedes agregar más de un <config_qualifier>. Separa cada uno con un guión.

Guarda los recursos alternativos respectivos en este nuevo directorio.


Los archivos de recursos deben tener exactamente el mismo nombre que los archivos de recursos predeterminados.

65
Recursos alternativos.
Ejemplos de recursos predeterminados y alternos:

El calificador hdpi indica que los recursos de ese directorio son para dispositivos con pantalla de alta densidad.

Las imágenes de cada uno de estos directorios de elementos de diseño están dimensionadas para una densidad de
pantalla específica, pero los nombres de archivo son exactamente iguales.

De este modo, el ID de recurso que usas para hacer referencia a la imagen [Link] o [Link] es siempre el
mismo, pero Android selecciona la versión de cada recurso que mejor se ajusta al dispositivo actual comparando la
información de configuración del dispositivo con los calificadores del nombre del directorio de recursos.

Android admite varios calificadores de configuración, y tú puedes agregar múltiples calificadores a un nombre de
directorio separando cada calificador con un guión.

[Link] 66
Recursos alternativos.
Algunos ejemplos de calificadores:
Configuración Valores de Descripción
calificadores
Idioma y región en El idioma se define mediante un código de idioma ISO 639-1 de dos letras, opcionalmente seguido de un código de
fr región ISO 3166-1-alfa-2 de dos letras (precedido por “r” en minúscula).
en-rUS Para los códigos no se distinguen mayúsculas ni minúsculas; el prefijo r se usa para distinguir la parte de la región.
fr-rFR No se puede especificar una región sola.
fr-rCA Esto puede cambiar durante el ciclo de vida de tu aplicación si el usuario modifica el idioma en la configuración del
etc. sistema
Tamaño de pantalla small small: Pantallas que son de tamaño similar a una pantalla QVGA de baja densidad. El tamaño de diseño mínimo de
normal una pantalla pequeña es de aproximadamente 320 x 426 unidades dp.
large normal: Pantallas que son de tamaño similar a una pantalla HVGA de densidad media. El tamaño de diseño mínimo
xlarge de una pantalla normal es de aproximadamente 320 x 470 unidades dp.
large: Pantallas que son de tamaño similar a una pantalla VGA de densidad media. El tamaño de diseño mínimo de
una pantalla grande es de aproximadamente 480 x 640 unidades dp.
xlarge: Pantallas que son considerablemente más grandes que la pantalla HVGA de densidad media tradicional. El
tamaño de diseño mínimo de una pantalla extra grande es de aproximadamente 720 x 960 unidades dp.
Densidad de píxeles ldpi, mdpi ,hdpi , ldpi: Pantallas de baja densidad; aproximadamente, 120 dpi.
de la pantalla (dpi) xhdpi , xxhdpi , mdpi: Pantallas de densidad media (en HVGA tradicional); aproximadamente , 160 dpi.
xxxhdpi ,nodpi hdpi: Pantallas de alta densidad; aproximadamente, 240 dpi.
tvdpi xhdpi: Pantallas de densidad extra alta; aproximadamente, 320 dpi. Se agregó en el nivel de API 8.
xxhdpi: Pantallas de densidad extra extraalta; aproximadamente, 480 dpi. Se agregó en el nivel de API 16.
xxxhdpi: usos de densidad extra extra extraalta (ícono lanzador únicamente, consulta la nota en Compatibilidad con
varias pantallas); aproximadamente, 640 dpi. Se agregó en el nivel de API 18.

[Link] 67
Soporte a diferentes dispositivos.
Idiomas y culturas.
Siempre es una buena práctica extraer strings de IU del código de tu app y conservarlas en un archivo externo.
Android facilita esta tarea con un directorio de recursos en cada proyecto del sistema operativo.

Para agregar compatibilidad con más idiomas, crea directorios values adicionales dentro de res/ que incluyan un guión y el
código de idioma ISO al final del nombre del directorio.

Agrega los valores de string para cada configuración regional en el archivo correspondiente.

En tiempo de ejecución, el sistema Android usa un conjunto correspondiente de recursos de string basado en la
configuración regional actual del dispositivo del usuario.

68
Soporte a diferentes dispositivos.
Idiomas y culturas. Puedes hacer referencia a tus recursos de string en el
A continuación se muestra el contenido de algunos código fuente y en otros archivos XML usando el nombre
archivos strings para diferentes idiomas: del recurso definido por el atributo name del
elemento <string>.

Desde tu código fuente:

Desde otros archivos XML :

69
Soporte a diferentes dispositivos.
Tamaños y densidades de pantalla.
Android categoriza las pantallas del dispositivo utilizando dos propiedades generales: tamaño y densidad.
Se debe incluir algunos recursos alternativos que optimicen la apariencia de su aplicación para diferentes
tamaños de pantalla y densidades.

Existen cuatro tamaños generalizados: small, normal, large, xlarge

Y cuatro densidades generalizadas: baja (ldpi), media (mdpi), alta (hdpi), extra alta (xhdpi)

Tomar en cuenta que la orientación de las pantallas (horizontal o vertical) se considera una variación del
tamaño de la pantalla.

Ejemplo de estructura de recursos


Para soportar diversos tamaños
Y orientaciones de pantalla.

70
Soporte a diferentes dispositivos.
Tamaños y densidades de pantalla.
Es importante proveer de recursos alternos para considerar las imágenes con las cuatro densidades
generalizadas: baja (ldpi), media (mdpi), alta (hdpi), extra alta (xhdpi)

Esto significa que si genera una imagen 200x200 para dispositivos xhdpi, debe
generar el mismo recurso en 150x150 para hdpi, 100x100 para mdpi y 75x75 para
dispositivos ldpi.

Estructura de carpetas de recursos:

Herramienta para producir diferentes


Densidades de imágenes.
[Link]

71
Soporte a diferentes dispositivos.
Tamaños y densidades de pantalla.

La densidad de una pantalla es una unidad que se mide en píxeles por pulgada (se puede abreviar
como PPP o como PPI (en inglés, pixels per inch))

La resolución de pantalla es el número de píxeles que puede ser mostrado en la pantalla.


Viene dada por el producto del ancho por el alto, medidos ambos en píxeles.

Es importante evitar crear diseños usando píxeles absolutos para definir distancias o tamaños.
Cuando especifiques dimensiones, utiliza siempre las unidades dp o sp.

Un dp es un píxel independiente de la densidad que corresponde al tamaño físico de un píxel a 160 dpi.

Un sp es la misma unidad base, pero se escala según el tamaño de texto preferido por el usuario (es un píxel
independiente de la escala), por lo que deberías utilizar esta unidad de medida cuando definas el tamaño de
texto (pero nunca para tamaños de diseño).

72
Soporte a diferentes dispositivos.
Tamaños y densidades de pantalla.

Un dp es igual a un pixel en una pantalla de densidad de 160 .


Para calcular dp: dp = (ancho en píxeles * 160) / densidad de la pantalla.

Escala de imágenes:

Proporciones
•Para ldpi (x0.75)
•Para mdpi (nuestra medida base)
•Para hdpi (x1.5)
•Para xhdpi (x2.0)

73
Soporte a diferentes dispositivos.
Tamaños y densidades de pantalla.

Tamaños de pantallas y densidades con dispositivos Android (Según Google)

74
Soporte a diferentes dispositivos.
Versiones de Android.
A continuación se muestra cómo aprovechar las API más recientes y poder soportarlas en versiones previas de
Android.

Por lo general, es una buena práctica soportar aproximadamente el 90% de los dispositivos activos, mientras
orienta su aplicación a la versión más reciente.

Se recomienda para proporcionar las mejores características y funciones en varias versiones de Android, utilizar la
Biblioteca de soporte de Android en su aplicación, que permite utilizar varias API de plataforma recientes en versiones
anteriores.

El archivo [Link] describe las versiones de Android compatibles para tu App.


Los atributos minSdkVersion y targetSdkVersion con el elemento <uses-sdk> identifican el nivel de API más bajo con el
que su aplicación es compatible y el nivel de API más alto con el que diseñó y probó su aplicación.

Ejemplo:

75
Soporte a diferentes dispositivos.
Versiones de Android.
A medida que se lanzan nuevas versiones de Android, algunos estilos y comportamientos pueden cambiar.

Para permitir que su aplicación aproveche estos cambios y asegúrese de que su aplicación se ajusta al estilo del dispositivo
de cada usuario, debe establecer el valor targetSdkVersion para que coincida con la versión de Android más reciente
disponible.

Verificación de la version del sistema en tiempo de ejecución.

Android proporciona un código único para cada versión de la plataforma en las constantes de la clase Build .
Utilice estos códigos dentro de su aplicación para crear condiciones que aseguren que el código que depende de niveles
de API más altos se ejecuta sólo cuando esas API están disponibles en el sistema.

76
Soporte a diferentes dispositivos.
Versiones de Android.
También es posible utilizar:
-Los calificadores de versión de android para configurar recursos alternativos.
-El uso de Fragments.

Ejercicio propuesto.
Tomando en cuenta los recursos alternos y con las indicaciones del instructor,
crea una App que tenga las siguientes características:

1- La App debe ajustarse a la configuración del lenguaje que el usuario haya


seleccionado en su móvil (Ingles, Español y Francés)

2- Considerar los tamaños y/u orientación que el móvil puede tener


en cualquier momento para que la App se ajuste automáticamente
así como también las posibles densidades de los móviles que la ejecutarán.

3- Considerar un tema diferente para al menos 2 versiones de Android.

77
Actividades

Ing. Alex Jiménez.


Alex.J2k@[Link]
Sesión 2
Objetivos
 Conocer las actividades y su ciclo de vida.
 Conocer como Interactuar con otras actividades .
 Poder interactuar con otras aplicaciones.
 Conocer otras funciones de las intenciones y Filtros .

79
Actividad
Una Activity es un componente de la aplicación que contiene una pantalla con la que los usuarios pueden
interactuar para realizar una acción, como marcar un número telefónico, tomar una foto, enviar un correo
electrónico o ver un mapa.

Cuando se crea una aplicación nueva con las herramientas del Android SDK, la actividad auxiliar que se crea
automáticamente incluye un filtro de intents que declara que la actividad responde a la acción “principal” y se
debe colocar en la categoría “lanzador”.

La actividad se declara en el archivo de manifiesto con un llamado filtro de intents y se ve de esta manera:

[Link]

80
Actividad
Normalmente una una actividad esta ligada a un layout (archivo xml que define el diseño de una
interface de usuario).

Actividad: [Link] Layout : activity_saludo.xml

81
Ciclo de vida de las actividades
[Link]

82
Comunicación entre actividades
Una actividad puede invocar la ejecución de otra actividad y pueden enviarse información o
argumentos a través del objeto de tipo Intent

Actividad Actividad
Intent
Origen Destino

83
Comunicación entre actividades

Procesos asíncronos

Resultcode = RESULT_OK & Intent Actividad1


Requestcode = 1

Resultcode = RESULT_CANCELED & Intent


Actividad Actividad2
Origen Requestcode = 2

Resultcode = RESULT_OK & Intent

Requestcode = N ActividadN

84
Cuando se invoca una actividad
(Actividad origen)

85
En la actividad invocada se pueden tomar los datos así:
(Actividad destino)

86
Cuando la actividad invocada (Actividad destino) finaliza
también puede devolver datos a la actividad que la invocó.

87
La actividad invocadora (Actividad origen) deberá hacer
algo similar a esto:

88
Ejercicio

89
Tareas y pilas de actividades.
Una tarea es una colección de actividades con la que los usuarios interactúan cuando realizan un trabajo
determinado. Las actividades se organizan en una pila (la pila de actividades), en el orden en el que se abre cada
actividad.
Cuando la actividad actual inicia otra actividad, la actividad nueva pasa a la parte superior de la pila y tiene el foco.
La actividad anterior continúa en la pila, pero está detenida. Cuando una actividad se detiene, el sistema retiene el
estado actual de su interfaz de usuario.
Cuando el usuario presiona el botón Atrás , se saca la actividad actual de la parte superior de la pila y se reanuda la
actividad anterior

[Link]
90
Tareas y pilas de actividades.
Es posible también tener mas de unas tarea simultáneamente
ejecutándose en memoria.

Dado que las actividades de la pila de actividades nunca se reorganizan, si


tu aplicación permite que los usuarios inicien una actividad determinada
desde más de una actividad, se crea una instancia nueva de esa actividad
y se la inserta en la pila (en lugar de pasar una instancia anterior de la
actividad a la parte superior).
Por lo tanto, quizá se creen instancias de una actividad de tu aplicación
varias veces (incluso desde diferentes tareas
91
Tareas y pilas de actividades.
En resumen, el comportamiento predeterminado de las actividades y las tareas es el
siguiente:
 Cuando la actividad A inicia la actividad B, se detiene la actividad A, pero el sistema retiene
su estado (por ejemplo, la posición de desplazamiento y el texto ingresado en formularios).
Si el usuario presiona el botón Atrás mientras se realiza la actividad B, se reanuda la
actividad A con su estado restaurado.
 Cuando el usuario deja una tarea presionando el botón Inicio, la actividad actual se detiene
y su tarea pasa a segundo plano. El sistema retiene el estado de cada actividad en la tarea.
Si el usuario luego reanuda la tarea seleccionando el ícono del lanzador que inició esa
tarea, la tarea pasa a primer plano y se reanuda la actividad de la parte superior de la pila.
 Si el usuario presiona el botón Atrás, la actividad actual se saca de la pila y se destruye. Se
reanuda la actividad anterior de la pila. Cuando se destruye una actividad, el
sistema no retiene el estado de la actividad.
 Se pueden crear instancias de las actividades varias veces, incluso desde otras tareas.
92
Tareas y pilas de actividades.
Los comportamientos descritos anteriormente pueden ser alterados (Se recomienda dejar los comportamientos de forma estandar).

Mediante el archivo Mediante indicadores Descripción


de manifiesto y su (constantes) con un Intent
atributo launcMode

standard Predeterminado. El sistema crea una instancia nueva de la actividad en la tarea desde la cual se
inició y dirige la intent hacia dicha tarea. Se pueden crear instancias de la actividad varias veces,
cada instancia puede pertenecer a diferentes tareas, y una tarea puede tener varias instancias.

singleTop FLAG_ACTIVITY_SINGLE_TOP Si la actividad que se inicia es la actividad actual (en la parte superior de la pila de actividades), la
instancia existente recibe una llamada a onNewIntent(), en lugar de crear una instancia nueva de la
actividad.
singleTask FLAG_ACTIVITY_NEW_TASK Inicia la actividad en una tarea nueva. Si ya se está ejecutando una tarea para la actividad que inicia
ahora, esa tarea pasa a primer plano con su último estado restaurado y la actividad recibe la intent
nueva en onNewIntent().
singleInstance n/a Es igual que "singleTask", con la excepción de que el sistema no lanza otras actividades en la tarea
que contiene la instancia. La actividad es siempre el único miembro de su tarea; todas las
actividades iniciadas por esta actividad se abren en una tarea independiente.

n/a FLAG_ACTIVITY_CLEAR_TOP Si la actividad que se inicia ya se está ejecutando en la tarea actual, en lugar de lanzar una instancia
nueva de esa actividad, todas las demás actividades de la parte superior de esta se destruyen y esta
intent se entrega a la instancia reanudada de la actividad (ahora en la parte superior), a través
de onNewIntent()).

93
Guardando y recuperando el estado de una actividad
Cuando el sistema detiene una de tus actividades es posible que el sistema destruya esa actividad
completamente si necesita recuperar memoria del sistema.
Cuando esto sucede, se pierde la información sobre el estado de la actividad.
Antes de que la actividad sea vulnerable a la destrucción, el sistema llama a onSaveInstanceState().
El sistema pasa a este método un Bundle en el que puedes guardar información del estado de la actividad
como pares nombre-valor mediante métodos como putString() y putInt().
Luego, si el sistema finaliza el proceso de tu aplicación y el usuario regresa a la actividad, el sistema vuelve a
crear la actividad y pasa el Bundle a onCreate() y a onRestoreInstanceState().

94
Demostración
Con la ayuda del instructor desarrolla la siguiente App:
1- La actividad principal debe solicitar un número de tabla de multiplicar.

2- Cuando se haga clic en el botón “mostrar” se debe llamar a otra actividad para enviar el número de tabla
como argumento y la actividad invocada debe mostrar la respectiva tabla de multiplicar.

3- La segunda actividad debe solicitar la confirmación al usuario si desea o no ver otra tabla.
Cuando el usuario seleccione la opción “Si” debe retornar se a la primera actividad y solicitar otro número
de lo contrario la app debe finalizar.

95
Llamando a otra aplicación.
Es posible llamar a otra app basándose en una “acción” que se desea realizar.
Por ejemplo, si tu app tiene la dirección de una empresa que deseas mostrar en un mapa, no necesitas crear una actividad para mostrar
mapas en tu app.
En cambio, puedes crear una solicitud para ver la dirección utilizando una Intent.
Luego, el sistema Android inicia una app que puede mostrar la dirección en un mapa.

Intents implícitas.
No indican el nombre de clase del componente que se ha de iniciar, sino una acción que se ha de realizar.
Por ejemplo, ver, editar, enviar y obtener algo.
Es posible también incluir datos relacionados con la acción, como la dirección que deseas ver o el mensaje de correo electrónico que
deseas enviar.
Según la intent que deseas crear, los datos pueden ser un Uri, uno de varios tipos de datos diferentes, o quizá la intent no necesite ningún
dato.
Ej. Para iniciar una llamada telefónica:

[Link]
96
Llamando a otra aplicación.

97
Llamando a otra aplicación.
Verificar que exista una app para recibir la intent
Para verificar que haya una actividad disponible que pueda responder a la intent, llama a
queryIntentActivities() a fin de obtener una lista de actividades capaces de manejar tu Intent.
Si el objeto List no está vacío, puedes usar la intent de forma segura. Por ejemplo:

Si isIntentSafe es true, significa que al menos una app responderá a la intent.


Si es false, significa que no existen apps para manejar la intent.

Luego de todo lo anterior solamente deberás utilizar cualquiera de los métodos:


 startActivity(myIntent)
 startActivityForResult(id,myIntent)

98
Llamando a otra aplicación.
Mostrar un selector de apps
Es posible que más de una app pueda responder a la intent y el usuario puede seleccionar
la app que se usará.

Sin embargo, si la acción que se realizará puede controlarse a través de varias apps y es posible que el usuario
prefiera usar una app diferente cada vez (como una acción de “compartir”, para la cual los usuarios pueden
tener varias apps mediante las cuales deseen compartir un elemento), debes mostrar explícitamente un
diálogo de selección.

99
Llamando a otra aplicación.
Mostrar un selector de apps

100
Llamando a otra aplicación.
Permitir que otras Apps inicien tu actividad (Conocer otras funciones de Intents y filtros)
Si tu app puede realizar una acción que podría ser útil para otra app, tu app debe estar preparada para
responder a las solicitudes de acción de otras apps.
Por ejemplo, si desarrollas una app social que permite compartir mensajes o fotografías con los amigos del
usuario, es importante que admitas la intent ACTION_SEND para que los usuarios puedan iniciar una acción de
“compartir” desde otra app y lanzar tu app para realizar la acción.
Para permitir que otras apps inicien tu actividad, debes agregar un elemento <intent-filter> en tu archivo de
manifiesto para el elemento <activity> correspondiente.

Agregar un filtro de intents definiendo acciones y datos.


 Acción : Una string que indica la acción que se ha de realizar.
Por lo general, uno de los valores definidos por la plataforma, como ACTION_SEND o ACTION_VEW.
Especifica esto en tu filtro de intents con el elemento <action>.
El valor que especifiques en este elemento debe ser el nombre completo de la string de acción en lugar de la
constante de la API ([Link]

101
Llamando a otra aplicación.
Permitir que otras Apps inicien tu actividad (Conocer otras funciones de Intents y filtros)
Agregar un filtro de intents definiendo acciones y datos.
 Datos : Una descripción de los datos relacionados con la intent.
Especifica esto en tu filtro de intents con el elemento <data>.
Utilizando uno o más atributos en este elemento, puedes especificar el tipo MIME (extensiones
multipropósito de correo de Internet), un prefijo URI (identificador uniforme de recursos), un esquema URI, o
una combinación de estos y otros que indique el tipo de datos aceptados.
Nota: Si no necesitas indicar detalles específicos sobre el Uri de datos, debes especificar solo el
atributo android:mimeType para declarar el tipo de datos que tu actividad maneja,
como text/plain o image/jpeg.
 Categoría: Proporciona una forma adicional de caracterizar la actividad que maneja la intent, generalmente
relacionada con el gesto del usuario o la ubicación desde la cual se inicia.
El sistema admite varias categorías diferentes, pero la mayoría no suelen utilizarse.
Sin embargo, todas las intents implícitas se definen, de forma predeterminada, con CATEGORY_DEFAULT.
Especifica esto en tu filtro de intents con el elemento <category> .

102
Llamando a otra aplicación.
Permitir que otras Apps inicien tu actividad (Conocer otras funciones de Intents y filtros)
Ejemplo.
Una actividad con un filtro de intents que controla la intent ACTION_SEND cuando el tipo de datos es un texto
o una imagen:

Si existen dos pares de acción y datos que son mutuamente excluyentes en tus comportamientos, debes crear
filtros de intents separados para especificar qué acciones son aceptables combinadas con qué tipos de datos.

103
Llamando a otra aplicación.
Permitir que otras Apps inicien tu actividad (Conocer otras funciones de Intents y filtros)
Manejar la intent en tu actividad
Para decidir la acción que debe realizarse en tu actividad, puedes leer el Intent que se usó para iniciarla.

104
Llamando a otra aplicación.
Permitir que otras Apps inicien tu actividad (Conocer otras funciones de Intents y filtros)
Supongamos que la actividad maneja texto e imágenes para las intents ACTION_SEND y ACTION_SENDTO.
En este caso, debes definir dos filtros de intents separados para las dos acciones porque una intent
ACTION_SENDTO debe usar el Uri de datos para especificar la dirección del destinatario usando el esquema de
URI send o sendto.

Nota: Para recibir intents implícitas, debes incluir la categoría CATEGORY_DEFAULT en el filtro de intents.
Los métodos startActivity() y startActivityForResult() tratan todas las intents como si pertenecieran a la
categoría CATEGORY_DEFAULT.
Si no la declaras en tu filtro de intents, no se aplicará ninguna intent implícita a tu actividad.
105
Interfaces de usuario.

Ing. Alex Jiménez.


Alex.J2k@[Link]
Sesión 3
Objetivos
 Conocer los controles básicos para la creación de interfaces de usuario.
 Layouts
 Buttons
 TextView
 EditText
 ImageView
 Checkbox
 RadioButton
 Spinner
 AutoCompleteTextView
 Conocer como utilizar estílos y temas.

107
Interfaces de usuario
 View
Una vista es un area rectangular en la pantalla que
gestiona el tamaño, el dibujado, el cambio de foco y los
gestos del área que representan.
 La clase [Link] sirve de clase Base para todos los
“widgets”
 Vistas disponibles: TextView, EditText, Button, RadioButton,
Checkbox, DatePicker TimePicker, Spinner, ImageView, EditText
TextView, Button, etc.
 ViewGroup
 Composición de vistas. Los controles complejos y el Layout
heredan de la clase base ViewGroup.

108
Interfaces de usuario
 Las vistas se organizan en estructuras de árbol cuya
raíz es un ViewGroup
 setContentView() permite añadir una vista a una
actividad.

 La plataforma Android ofrece dos métodos para


diseñar la interfaz:
 procedural (código)
 declarativa (XML) public

109
Interfaces de usuario
 Diseñando interface de forma declarativa XML.
Las vistas heredan atributos sus clases base y definen
sus propios atributos
 El atributo id identifica a la vista dentro del árbol y
permite recuperarla desde la aplicación.

El símbolo (@) indica al parser del xml que lo que viene a continuación lo trate como un
identificador de recurso. El símbolo (+) indica que el nombre que viene a continuación es un nombre
nuevo y debe ser añadido a la clase de recursos [Link]

Gracias a esto será posible referenciar nuestro control desde las actividades de la siguiente forma:

(TipoDeControl) nombreControlObjeto = (TipoDeControl) findViewById([Link]) ;

Ejemplo:
TextView tvTelefono = (TextView) findViewById([Link]) ;

110
Layouts
 Un Layout es un contenedor que determina la disposición de las vistas en la pantalla.

Tipos de layout:
 LinearLayout: dispone las vistas horizontal o verticalmente .
 RelativeLayout: dispone las vistas relativos a los otros.
 TableLayout: dispone las vistas en filas y columnas.
 AbsoluteLayout: dispone las vistas en coordenadas exactas
 FrameLayout: permite cambiar dinámicamente los controles en el layout.

111
LinearLayout
Se derivan en 2 tipos de orientación:
Horizontal Vertical

Esto es posible a través de su propiedad orientation


112
RelativeLayout
Los controles son alineados unos respecto a otros o respecto a su
contenedor.

113
FrameLayout
Utilizado para mostrar un control a la vez.

114
FrameLayout

115
TableLayout
Dispone a sus controles en filas y columnas.

116
Button Con texto usando la clase Button

Un botón consiste en un texto o un


icono (o ambos, el texto y un
ícono) que comunica qué acción Con Icono usando la clase ImageButton
ocurre cuando el usuario lo toca.

Con Texto e Icono usando la clase Button y el atributo drawableleft

117
Button

118
Button
Respondiendo al evento click

Declarando un método con el atributo onClick en También es posible declarar el controlador de eventos de clic mediante
programación en lugar de hacerlo en un diseño XML.
la declaración del xml
Cree un objeto [Link] y asígnelo al botón llamando a
setOnClickListener ([Link]).
Por ejemplo:

La actividad debe contar con un método para


manejar el evento click

El método debe:
1. Ser public
2. El tipo de retorno debe ser void
3. Un único parámetro de tipo View (donde se
identificará el View que hizo click)
119
Button
Gestión del evento ´click´

120
Proyecto Ejemplo
Con la ayuda del instructor desarrolla la siguiente App,
utilizando el(os) layout(s) que creas conveniente.
Aclaraciones:
1. El botón Calcular debe calcular y mostrar el
promedio simple de las notas solicitadas en el
campo Promedio (que es solmente de lectura)
2. El botón Salir debe cerrar la actividad.
3. Validar que las en las 3 notas solamente puedan
introducirse valores numéricos.
4. El promedio debe ser redondeado a 2 decimales.

121
ImageView

122
TextView

123
EditText

124
EditText

125
Propuesta:
 Diseñar el layout propuesto en la figura.
 Escribir el código necesario para validar al
usuario.
 Solamente podrá ingregar el usuario admin con
password 123.
 Si es válido se mostrará el mensaje “Bienvenido”
de lo contrario “Credenciales incorrectas”
 Si se intenta el acceso más de 3 la actividad
finalizará automáticamente.
 El botón Salir finalizará la actividad.

126
CheckBox

127
CheckBox

128
RadioButton

129
RadioButton

130
AutoCompleteTextView

131
AutoCompleteTextView

132
Toogle Button

Para detectar cuándo el usuario activa el botón o switch, cree un objeto


[Link] y asígnelo al botón llamando
Un botón de alternar permite al usuario
a setOnCheckedChangeListener ()
cambiar una configuración entre dos
estados.

Puede agregar un botón de alternar


básico a su diseño con el objeto
ToggleButton.
Android 4.0 (nivel 14 de la API) introduce
otro tipo de botón de alternar llamado
Switch que proporciona un control
deslizante, que puede agregar con un
objeto Switch. SwitchCompat es una
versión del widget Switch que se ejecuta
en dispositivos de vuelta a API 7.
133
Propuesta
 Diseñar el layout propuesto simulando una
encuesta de frutas preferidas similar al de la
figura.
 El View que solicita Fruta Preferida deberá ser un
AutoCompleteTextView similar al ejemplo
anterior.
 Escribir el código necesario para tomar toda la
información solicitada y mostrar un mensaje en
pantalla de tipo Toast al momento de hacer en clic
en el boton Enviar Encuesta.

134
Temas y estilos
 Un estilo es una colección de atributos que especifican el aspecto y el formato para un View.
 Un estilo puede especificar atributos como altura, relleno, color de fuente, tamaño de fuente, color de fondo
y mucho más.
 Un estilo se define en un recurso XML que está separado del XML que se especifica el diseño o layout.

Por ejemplo podrías definir un View de la siguiente forma:

O de ésta forma:

135
Temas y estilos
Los atributos relacionados con el estilo se eliminaron del XML de diseño y se colocaron en una definición de
estilo llamada CodeFont, que luego se aplica utilizando el atributo android:textAppearance.
Ejemplo de un recursos de estilo:

Un tema es un estilo aplicado a una Actividad o aplicación entera o en lugar de a un View.

Cuando un estilo se aplica como tema, cada vista de la actividad o aplicación aplica cada atributo de estilo que
admite.

Por ejemplo, si aplica el mismo estilo llamado CodeFont como un tema para una actividad, todo el texto
dentro de esa actividad aparece en una fuente monoespace color verde.
136
Temas y estilos
Los archivos de estilos deberán definirse como recursos en la carpeta res/values
Más ejemplos :

Otro ejemplo referenciando otros recursos:

 Según el atributo, puede usar valores con los siguientes tipos de recursos en un elemento <item>:
Fraction, Float, Boolean, Color, String, Dimension, Integer.

137
Temas y estilos
Herencia.
El atributo parent en el elemento <style> permite especificar un estilo desde el cual tu estilo debe heredar
los atributos.
Puede usarse para heredar atributos de un estilo existente y definir solo los atributos que desea cambiar o
agregar.
Puedes heredar de los estilos que has creado tú mismo o de los estilos que están integrados en la plataforma.
Por ejemplo, puede heredar la apariencia del texto predeterminado de la plataforma Android y modificarla:

138
Temas y estilos
Herencia.
Si quieres heredar de los estilos que has definido tú mismo, no tienes que usar parent.
En su lugar, puedes usar la notación de puntos al prefijar el nombre del estilo que desea heredar al nombre de
su nuevo estilo, separado por un punto.
Por ejemplo, para crear un nuevo estilo que herede el estilo CodeFont definido anteriormente, pero haga que
el color sea rojo, puedes crear un nuevo estilo como este:

Este estilo anula el color verde definido original mente en CodeFont.


Puedes continuar heredando estilos como éste, tantas veces como quieras encadenando nombres con
puntos. Por ejemplo, puedes ampliar [Link] para ser texto más grande, con:

139
Temas y estilos
Herencia.
Esta técnica para la herencia al encadenar nombres solo funciona para estilos definidos por sus propios
recursos.
No puede heredar los estilos integrados de Android de esta manera, ya que residen en un espacio de nombres
diferente al utilizado por sus recursos.
Para hacer referencia a un estilo incorporado, como TextAppearance, debe usar el atributo parent.

Aplicando un estilo a una vista:

El atributo style no usa el prefijo android: del espacio de nombres.

140
Temas y estilos
Aplicar un tema a una actividad o aplicación,
Para establecer un tema para todas las actividades de su aplicación, edita tu archivo [Link] y
en la sección <application> edítalo para incluir el atributo android:theme con el nombre del estilo.
Por ejemplo:

Aplicar un tema a una actividad:


Editando el archivo [Link] puedes editar cada una de las actividades de la siguiente forma:

141
Uso de Listas.

Ing. Alex Jiménez.


Alex.J2k@[Link]
Objetivos

 Aprender a crear listas.


 Aprender a utilizar adaptadores para poblar con datos una lista.
 Desarrollar listas personalizadas.
Listas
 Un ListView muestra una lista deslizante de elementos verticalmente.

Array ListView/ListActivity
Datos Adapter

Array, Archivos de texto,


SQLite, WebServices, otros.
Ejemplo de un ListActivity
Ejemplo de personalización de listas
Listas personalizadas.

Ing. Alex Jiménez.


Alex.J2k@[Link]
1. Creación de layout personalizado.
Representa a cada item que formará a la lista
personalizada.

2. Creación de un adaptador personalizado.


Heredando de la clase ArrayAdapter, en la cuál se
hará uso del layout personalizado.

3. Crear la actividad que hará uso del ArrayAdapter


personalizado.
1- Layout personalizado.
2- Adaptador pesonalizado
3- Creación
de Actividad
Demostración
Menús y Diálogos.

Ing. Alex Jiménez.


Alex.J2k@[Link]
•Conocer la forma de crear menús como lista de opciones
•Conocer la forma de crear menús contextuales
•Conocer las modalidades de creación de menús: XML y Código

158
•Menú de opciones
Despliega un grupo de opciones y está relacionado a
una actividad determinada. Se activa con la tela MENU.

•Menú contextual
Despliega un grupo de opciones y está relacionado a un
View determinado. Se activa manteniendo precionado un
View sin soltearlo por más de un segundo.

•Formas de crearlos:
•Código
•XML

159
Arquitectura de menús

160
161
162
Submenús

163
164
La identificación de grupos permite manipular algunos atributos de varias opciones de
menú:

•removeGroup(id)
•setGroupCheckable(id, checkable, exclusive)
•setGroupEnabled(id,boolean enabled)
•setGroupVisible(id,visible)

165
166
167
Cuadros de diálogo
 Los cuadros de diálogo permiten desplegar/solicitar información al usuario.
 Existen varias formas de mostrar diálogos:
 Haciendo uso de la clase Dialog
 Haciendo uso de la clase AlertDialog
 Haciendo uso de diálogos especializados:
 CharacterPickerDialog
 DatePickerDialog
 TimePickerDialog
 ProgressDialog
 Haciendo uso de Toast
 Haciendo uso de DialogFragment (A partir de la versión 3.0 de Android)

168
Cuádros de diálogo
 Uso de la clase Dialog.
 Vamos a crear un layout para mostrar la información deseada:

169
Cuádros de diálogo
 Definamos nuestra pantalla de acceso principal:

170
Cuádros de diálogo

171
Cuádros de diálogo

 Uso de AlertDialog

172
CharacterPickerDialog

 Utilizado para la captura de caracteres difíciles de conseguir en el teclado virtual.

173
CharacterPickerDialog

174
DatePickerDialog
 Utilizado para la captura de fechas en una forma ágil .

175
DatePickerDialog

176
DatePickerDialog

177
TimePickerDialog
 Utilizado para la captura de horas en una forma ágil .

178
TimePickerDialog

179
TimePickerDialog

180
ProgressDialog
 Utilizado para indicar la espera a la finalización de un proceso que
conlleve tiempo considerable en ejecutarse.

181
ProgressDialog

182
Preferencias de usuario y
Archivos.

Ing. Alex Jiménez.


Alex.J2k@[Link]

183
Objetivos

 Conocer el mecanismo para guardar información de preferencias de usuario.


 Conocer la forma de almacenar información en la memoria interna.
 Conocer la forma de almacenar información en la memoria externa (MicroSD)

184
Preferencias de usuario.

 Permiten almacenar información en formato xml.


 Normalmente se almacenan en el archivo
<paquete_de_aplicacion>shared_prefs<nombre_actividad.xml>

185
Preferencias de usuario.

 Clase utilizada:
 SharedPreferences
 Métodos utilizados:
 getSharedPreferences(archivo,modo de acceso)
 Cuando se necesite acceder a un archivo determinado de una actividad específica.
 getPreferences()
 Cuando solamente se necesita acceder al archivo de preferencias de la actividad que invoca al método.

186
187
188
189
Ubicación de archivo en emulador.

190
Acceso a archivos en la microSD

 Se necesita dar permisos a la aplicación en el archivo [Link]:


 WRITE_EXTERNAL_STORAGE
 READ_EXTERNAL_STORAGE

 Podemos verificar el estado de la tarjeta microSD mediante el método:


[Link]()

 Con esto podemos saber si existe una microSD instalada, si solamente es de lectura o si no
está instalada.

191
Acceso a archivos en la microSD
 Es posible conocer la ruta hacia la MicroSD mediante la siguiente forma:
File extDir = [Link]();
String FILE_NAME = [Link]() + "/[Link]";

 Esta ruta normalmente es mnt/sdcard/[Link]

 Podremos usar comando:


Adb –s emulator-5554 shell [Para conectarnos al dispositivo virtual]
cd /mnt/sdcard [Para ubicarnos en la carpeta microsd]

192
193
Acceso a archivos en la microSD
Ubicación de archivo en emulador

194
Acceso a archivos en la microSD
Permisos en [Link]

195
Acceso a archivos en la microSD

196
Acceso a archivos en la microSD

197
Acceso a archivos en la microSD

198

También podría gustarte