Curso Completo de Desarrollo Android
Curso Completo de Desarrollo Android
Alex.J2k@[Link]
Contenido
Sesión Tema Sub Tema
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
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)
2
Sesión 1.
Objetivos.
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
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:
[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.
36
Creación de un proyecto.
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
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.
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.
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.
49
Ejecución de App.
Ejecutación en un emulador.
Con un emulador activo, ejecuta la app desde Android Studio de la siguiente manera:
50
Primer proyecto Android
DEMOSTRACION
51
Segundo proyecto Android
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.
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.
a) Recursos predeterminados
b) Recursos alternativos
[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)
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>
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”
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.
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>.
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.
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.
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.
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))
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.
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.
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.
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.
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:
77
Actividades
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).
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
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.
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:
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.
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.
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.
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:
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
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
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:
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
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.
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:
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 :
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:
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.
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:
141
Uso de Listas.
Array ListView/ListActivity
Datos Adapter
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
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.
183
Objetivos
184
Preferencias de usuario.
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
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]";
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