SlideShare a Scribd company logo
1 of 57
M.Sc(c) Jaime Caicedo Guerrero
DESARROLLO DE APLICACIONES
PARA DISPOSITIVOS MOVILES
M.Sc (c). Jaime Caicedo Guerrero
jcaicedo@unicauca.edu.co
M.Sc(c) Jaime Caicedo Guerrero
Introducción
• Actividad (android.app.Activity) -> unidad básica de
funcionalidad de una aplicación Android.
• Para darle a las Actividades presencia en la pantalla y
diseñar su interfaz de usuario, hay que trabajar con
vistas (Views) y grupos de vistas (Viewgroups),
unidades básicas de la interfaz de usuario en la
plataforma Android.
M.Sc(c) Jaime Caicedo Guerrero
Introducción
Vistas (View)
• Una vista es un objeto de clase base android.view.View. Es una
estructura de datos cuyas propiedades guardan la disposición y
contenido para un área rectangular específica de la pantalla. Un
objeto vista (View) maneja la medida y disposición, dibujado,
cambio de foco, scroll y pulsaciones de teclas para el área de
pantalla a la que representa.
• La clase View sirve como clase base para los widgets, un conjunto
de subclases completamente implementadas que dibujan
elementos interactivos en la pantalla. Los widgets manejan sus
propias medidas y forma: Text (Para mostrar texto), EditText (Para
que el usuario introduzca texto), Button (Botón), RadioButton (Para
seleccionar una opción de un grupo de ellas),Checkbox (Para
seleccionar una o más opciones de un conjunto.) …
M.Sc(c) Jaime Caicedo Guerrero
Introducción
Grupos de vistas (Viewgroup)
• Un grupo de vistas es un objeto de la
clase android.view.Viewgroup. Como su nombre indica, un
grupo de vistas es un tipo especial de objeto Vista cuya
función es contener y organizar un subconjunto de vistas y
otros grupos de vistas. Los grupos de vistas permiten añadir
estructura a la interfaz de usuario y construir elementos de
pantalla complejos que puedan ser referenciados como una
sola entidad.
• La clase Viewgroup sirve como clase base para los layouts, un
conjunto de subclases implementadas que ofrecen tipos
comunes de disposiciones en pantalla. Los layouts ofrecen
una forma de construir una estructura para un conjunto de
vistas.
M.Sc(c) Jaime Caicedo Guerrero
Introducción
Actividad
setContentView()
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets básicos
• Labels -> TextView
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Ejemplo de un TextView en Android"
android:id="@+id/label"
android:textStyle="bold"/>
TextViewExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets básicos
• Imágenes -> ImageView
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/icon"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:adjustViewBounds="true"
android:src="@drawable/molecule"
/>
ImageViewExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets básicos
• Campos de Texto -> EditText
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/field"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:autoText="true"
android:singleLine="false"/>
Algunas propiedades:
android:autoText
android:capitalize
android:numeric
android:password
EditTextExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets básicos
• Campos de chequeo -> Checkbox
<?xml version="1.0" encoding="utf-8"?>
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Este campo de chequeo se encuentra: unchecked" />
Algunos métodos importantes:
isChecked() determinar el estado del Checkbox
setChecked() fijar el estado del Checkbox
toggle() chequear el Checkbox, simulando una
acción del usuario
CheckBoxExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets básicos
Botones de selección-> RadioGroup, RadioButton
<RadioGroup
xmlns:android="http://schemas.android.com/apk/r
es/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RadioButton android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Rock" />
<RadioButton android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Salsa" android:checked="true"/>
<RadioButton android:id="@+id/radio3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pop" />
</RadioGroup>
Algunos métodos importantes:
check() chequear un RadioButton a través de su ID
clearCheck() clarear todos los Radio Buttons
getCheckedRadioButtonId() obtener el Id del radioButton
chequeado(-1 si ninguno se encuentra seleccionado)
RadioButtonExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Contenedores
Alojan varios componentes de Vista (View) o Grupos de
Vista (ViewGroup). Clase ViewGroup.LayoutParams
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Contenedores
LinearLayout
Los componentes son “alineados” en una columna o fila, uno
detrás de otro. Gestiona las siguientes propiedades:
• Orientation: Si representa una columna o fila
(android:orientation _horizontal|vertical).
• Fill Model: Hace referencia al llenado del espacio del
componente.(android:layout_width,android:layout_height):
– wrap_content: El componente debe llenar su espacio naturalmente.
– fillparent: - el componente debe llenar el espacio restante en el
contenedor
• Weight: prioridad en la repartición de espacio entre dos o
más componentes.
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Contenedores
LinearLayout
• Gravity: alinear el componente de forma diferente a sus valores por
defecto (left, top-aligned) (android:layout_gravity).
• Padding: incrementar el espacio por defecto entre los componentes
(android:padding).
LinearLayoutExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Contenedores
RelativeLayout
Organiza los widgets con relación al contenedor padre o con
relación a otros widgets.
• Posiciones relativas al contenedor:
– android:layout_alignParentTop – parte alta del contenedor
– android:layout_alignParentBottom – parte baja del contenedor
– android:layout_alignParentLeft - lado izquierdo del contenedor
– android:layout_alignParentRight – lado derecho del contenedor
– android:layout_centerHorizontal – horizontalmente en el centro del
contenedor
– android:layout_centerVertical – verticalmente en el centro del
contenedor
– android:layout_centerInParent – horizontal y verticalmente en el
centro del contenedor
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Contenedores
RelativeLayout
• Posiciones relativas a otros widgets:
Se requiere definir id para todos los componentes. Un widget B se puede
referir a un widget A con id @+id/widget_a a través de @id/widget_a.
– android:layout_above – arriba del widget referenciado
– android:layout_below – abajo del widget referenciado
– android:layout_toLeft – a la izquierda del widget referenciado
– android:layout_toRight – a la derecha del widget referenciado
– android:layout_alignTop – alinear parte alta widget A – parte alta widget B
– android:layout_alignBottom – alinear parte baja widget A – parte baja widget B
– android:layout_alignLeft – alinear izquierda widget A – izquierda widget B
– android:layout_alignRight - alinear derecha widget A – derecha widget B
– android:layout_alignBaseline – alínear líneas de base de los widgets
– android:layout_toRight – alinear a la derecha del widget referenciado
RelativeLayoutExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Contenedores
TableLayout
Permite posicionar los widgets en una tabla de acuerdo a la elección del
desarrollador. Trabaja con un contenedor interno: TableRow.
Existe control absoluto sobre la definición de filas; las columnas son
gestionadas por Android y se tiene un control indirecto.
• Algunas propiedades útiles:
– android:layout_span – número de columnas que puede ocupar un widget
– android:layout_column – fijar la columna de inicio de un widget
– android:stretchColumns – expandir una o más columnas para usar el espacio
sobrante (contenido ocupa menos espacio que el disponible) ->
setColumnStretchable().
– android:shrinkColumns – comprimir una o más columnas para utilizar el espacio en
pantalla (contenido ocupa más espacio que el disponible) ->
setColumnShrinkable().
– android:collapseColumns – ocultar una o más columnas -> setColumnCollapsed().
TableLayoutExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Contenedores
ScrollView
Variante de TableLayout.
Proporciona capacidades de scrolling para el contenido en la
pantalla.
Mantiene la integridad en la información de la tabla, pero sólo se
visualiza una parte de la misma.
ScrollViewExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
• Premisa básica: los elementos de selección son
preferidos sobre los elementos de ingreso de texto,
pese a las capacidades de restricción de contenido
que éstos pueden ofrecer.
• Android ofrece un conjunto de adaptadores de datos
que ofrecen una interfaz de datos común para
alimentar el contenido de este tipo de widgets.
Convierten los datos en datos visibles a través de
vistas de selección.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
Uso de ArrayAdapter:
• Parámetros:
– El Contexto a utilizar (típicamente la instancia de la
Actividad actual).
– El Id del recurso de la vista a usar
– El arreglo de items de datos que se va a utilizar
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
Instanciación de ArrayAdapter: (override del método
getView)
• Parámetros:
– Index del item en el arreglo que se desea desplegar en la vista
– Una vista existente para actualizar los datos en la posición
deseada.
– El widget que contendrá la vista
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
• ListView -> control ListBox clásico en Android
La actividad puede extender
de ListActivity en lugar de
Activity.
El método SetListAdapter(),
permite fijar el ArrayAdapter
que se desea utilizar.
ListViewExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
• SpinControl -> control ComboBox clásico en Android
setDropDownViewResource()
enlace a un recurso específico
para configurar la apariencia del
control.
SpinnerExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
• GridView -> Vista de selección en dos dimensiones
Algunas propiedades:
• android:numColumns: número de columnas
(autofit -> ajuste automático)
• android:verticalSpacing,
android:horizontalSpacing: controla el espacio
entre los items de la grilla.
• android:columnWidth: indica el ancho de las
columnas.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
• GridView -> Vista de selección en dos dimensiones
GridViewExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
• AutoCompleteView -> Híbrido entre EditView y
Spinner con propósitos de predicción de Texto.
AutoCompleteViewExample.java
<AutoCompleteTextView
android:id="@+id/edit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:completionThreshold="3"/>
No soporta listeners de selección
Sugerencia: Registro de un TextWatcher
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
• Gallery -> Control de lista desplazable
horizontalmente. (Uso frecuente: galería de fotos)
GalleryExample.java
<Gallery
android:id="@+id/galleryCtrl"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Manejo similar a una lista:
1. Se obtiene una referencia al Gallery
2. Se fija el adaptador para los datos
3. Se registra el manejo de eventos
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
• Mejorando el widget ListView
– Cómo adicionar íconos a la lista?
La clave está en la
modificación del
ArrayAdapter!
IconListViewExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de selección
• Mejorando el widget ListView
– Qué sucede si se requiere varios tipos de íconos? O
– No todas las filas usan el mismo layout (algunas una línea de
texto, otras dos)?
El concepto de Inflación (“Inflation”): convertir la especificación
de un layout XML en el árbol de objetos View que representa.
Concepto implementado internamente por Android a través de
la clase “ViewInflate”. Permite la manipulación de cada objeto
View del layout para dar la apariencia buscada.
MultipIeIconListViewExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de Fecha/Hora
• DatePicker, DatePickerDialog
– Introducción de fecha en el formato año, mes (0 - 11), día.
– Proporciona un objeto callback OnDateSetListener que
informa sobre una nueva fecha seleccionada por el
usuario.
• TimePicker, TimePickerDialog
– Fijar la hora en el formato Hora (0 - 23), Minuto (0 - 59).
– Fijar el formato de la hora (AM/PM – 24H)
– Proporciona un objeto callback OnTimeSetListener que
informa sobre una nueva hora seleccionada por el usuario.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de Fecha/Hora
DateTimeExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Widgets de Fecha/Hora
• DigitalClock, AnalogClock
– Diseñado con propósitos de despliegue de fecha/hora y no
de introducción de información.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/a
ndroid"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<AnalogClock android:id="@+id/analog"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true"
/>
<DigitalClock android:id="@+id/digital"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/analog"
/>
</RelativeLayout>
ClockExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Tabs
• Facilita el despliegue de información a través de varias pantallas
gestionadas por la actividad (pestañas).
Componentes:
TabWidget: Implementa la fila de tab
buttons (incluye labels y
opcionalmente íconos).
TabHost: Contenedor para los
botones de los Tabs y el contenido de
los mismos.
FrameLayout: Contenedor para el
contenido de los Tabs.
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Tabs
Algunas reglas básicas:
• El TabWidget debe tener un identificador de la forma
@android:id/tabs.
• Evitar el padding en el FrameLayout para los tab buttons
• Si se desea usar la clase TabActivity el TabHost debe
tener un id de la forma @android:id/tabhost.
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Tabs
Construcción de los Tabs:
El código Java debe informar al TabHost qué vistas corresponden al
contenido de los tabs y cómo deben lucir los tab buttons -> objetos
TabSpec.
Métodos esenciales:
• setContent(): inidica el contenido del tab (android:id de la vista
específica).
• setIndicator(): proporciona las etiquetas para los tab buttons
(opcionalmente se incluye un drawable para representar íconos).
• setup(): método invocado en el TabHost (no requerido si la clase
base de la actividad es TabActivity)
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Tabs
<TabWidget android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<AnalogClock android:id="@+id/tab1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
/>
<Button android:id="@+id/tab2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Tab del botón"
/>
</FrameLayout>
</LinearLayout>
</TabHost>
TabExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Menús contextuales
• Información adicional asociada a un widget
específico.
• Dos sabores: Menú de opciones (accesible
al presionar el botón hardware del
dispositivo), Menú contextual (presionar y
sostener sobre el widget que lo despliega).
• Creación del menú: onCreateOptionsMenu() -> recibe una instancia
de Menu.
• super.onCreateOptionsMenu(menu) -> Asegurar que el framework
Android adicione las opciones necesarias.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Menús contextuales
• Adición de opciones al Menú -> método add ().
– Un identificador de grupo (int): generalmente 0.
– Un identificador para la opción (int): identificar la opción
seleccionada durante un callback a
onOptionsItemSelected().
– Etiqueta para la opción.
– Los identificadores de la opción deben ser referidos a la
constante FIRST.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Menús contextuales
• Vinculación del menú al widget
– El menú está asociado a un widget y no a una actividad
específica.
– onPopulateContextMenu(): permite fijar el contenido del
menú y asociar la Vista (View) correspondiente.
– onContextItemSelected(),onOptionsItemSelected():
permite acceder a la información cuando una opción del
menú es seleccionada. Implementado en la Actividad.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Menús contextuales
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/a
ndroid"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/selection"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#eeeeee"/>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
/>
</LinearLayout>
MenuExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Mensajes y Alertas
• Usados generalmente con propósitos de notificación.
• Dos tipos de mensajes definidos por Android:
– Toast: mensaje transitorio (tiempo fijo), desaparece sin
intervención del usuario.
– AlertDialog: mensaje de diálogo estilo modal (requiere la
intervención del usuario para desaparecer la pantalla).
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Mensajes y Alertas
Toast:
• Se configura a través del método estático makeText():
– Contexto: actividad a la cual está asociado.
– Cadena del mensaje: (String)mensaje a ser desplegado (opc.
resource id).
– Duración: referido a las constantes LENGTH_SHORT y
LENGTH_LONG
• show(): despliega el toast.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Mensajes y Alertas
AlertDialog:
• Construido a partir de la clase Builder:
– setMessage(): cuerpo del mensaje.
– setTitle(), setIcon(): texto del título e ícono asociado al
diálogo.
– setPositiveButton(), setNeutralButton(), and
setNegativeButton() : configuración general del botón del
diálogo (etiqueta, lógica de la acción).
– show(): desplegar el diálogo.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Mensajes y Alertas
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/
android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<Button
android:id="@+id/alert"
android:text="Ver Alert"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/toast"
android:text="Ver Toast"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
MessageExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Barras de progreso
Introducción al manejo de Threads
• Operaciones que consumen altos recursos de
procesamiento -> interfaces congeladas.
• Android proporciona un conjunto de medios que
permite a hilos en background interactuar de forma
segura con el UI Thread:
• Objetos Handler, Runnable y UIThreadUtilities.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Barras de progreso
Introducción al manejo de Threads
• Handlers
– Sólo se requiere un Handler por Actividad y no se requiere
un registro manual.
– El hilo en background puede comunicarse con el Handler,
el cual realizará todo su trabajo en el UI Thread de la
Actividad (las actualizaciones de los widgets ocurren en
este hilo).
– Dos formas de comunicarse directamente con los
Handlers: objetos Message y Runnable.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Barras de progreso
Introducción al manejo de Threads
• Handlers
– Primer paso: obtener un manejador del pool de mensajes ->
obtainMessage().
– Enviar el mensaje a través de la familia de métodos disponibles:
– sendMessage(): pone un mensaje en el pool de forma
inmediata.
– sendMessageAtFrontOfQueue(): pone un mensaje en el pool de
forma inmediata y prioritaria.
– sendMessageAtTime(): pone el mensaje en el pool en el tiempo
fijado.
– sendMessageDelayed(): pone el mensaje en el pool, después
del retardo fijado.
– El Handler debe implementar handleMessage() para gestionar
el arrivo de mensajes en el pool.
M.Sc(c) Jaime Caicedo Guerrero
Android UI – Barras de progreso
Fijando un Handler para gestionar una barra de progreso
ProgressBarExample.java
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Navegación
Introducción a los Intents
• Forma de representar una acción a través de mensajes.
• La forma de comunicación en Android funciona
alrededor de “intents” y receptores de “intents”.
URL GET
Recurso Acción
+ Contexto Acción
Android Intents
+
La Web
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Navegación
Introducción a los Intents
• Dos componentes principales: la “acción” y los “datos”.
• Otros criterios que pueden agregarse:
– Una categoría: la actividad principal está en la categoría
LAUNCHER, indicando que debe ser accesible desde el menú
principal desde donde se lanzan las aplicaciones. Otras
actividades pueden pertenecer a categorías como DEFAULT o
ALTERNATIVE.
– Un tipo MIME: indicando el tipo de recurso sobre el cual se
desea operar.
– Un componente: la clase de la actividad que actúa como
receptora del intent.
– Extras: conjunto (Bundle) del que hace parte cualquier otra
información que se desee enviar al receptor del Intent.
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Navegación
Algunas acciones
• ANSWER_ACTION
• CALL_ACTION
• DELETE_ACTION
• DIAL_ACTION
• EDIT_ACTION
• VIEW_ACTION
• GET_CONTENT_ACTION
• INSERT_ACTION
• MAIN_ACTION
• PICK_ACTION
Algunas categorías
• ALTERNATIVE_CATEGORY
• BROWSABLE_CATEGORY
• DEFAULT_CATEGORY
• GADGET_CATEGORY
• HOME_CATEGORY
• LAUNCHER_CATEGORY
• PREFERENCE_CATEGORY
• SELECTED_ALTERNATIVE_CATEGORY
• TAB_CATEGORY
• TEST_CATEGORY
Introducción a los Intents
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Navegación
Introducción a los Intents
Algunas reglas básicas:
• La actividad debe soportar la acción especificada.
• La actividad debe soportar el tipo MIME establecido.
• La actividad debe soportar las categorías
establecidas en el Intent.
Intent filters
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Navegación
Introducción a los Intents
• Intent filters
Actividad principal de
la aplicación
Accesible desde el
menú principal
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Navegación
Uso de Intents para navegación entre pantallas
• Construir el intent: haciendo referencia a la
Actividad específica que se desea lanzar o a una URI.
• Realizar el llamado: invocar el método startActivity()
referido al intent creado.
M.Sc(c) Jaime Caicedo Guerrero
Android UI - Navegación
Uso de Intents para navegación entre pantallas
NavigateList.java
NavigateClock.java
Servidor
Proxy?
M.Sc(c) Jaime Caicedo Guerrero
Android – Carga del emulador usando Proxy
Importante: Si el acceso a Internet por parte del emulador se
da a través de un servidor proxy, esta configuración debe ser
realizada durante el lanzamiento del emulador de la
siguiente manera:
C:android-sdk-windowstools>emulator -avd Default -http-proxy
http://proxy.unicauca.edu.co:3128
M.Sc(c) Jaime Caicedo Guerrero
Jaime Caicacedo Guerrero
jcaicedo@unicauca.edu.co
Of. 405 ext. 2127
M.Sc(c) Jaime Caicedo Guerrero
¡Gracias!
Jaime Caicedo Guerrero
jcaicedo@unicauca.edu.co
Of. 405 ext. 2127

More Related Content

Viewers also liked

An Approach to Digital Marketing
An Approach to Digital MarketingAn Approach to Digital Marketing
An Approach to Digital MarketingSuresh Parmachand
 
Primera clase configuración del EVA
Primera clase configuración del EVAPrimera clase configuración del EVA
Primera clase configuración del EVAMarisol Aman
 
De hemorroides tratamiento
De hemorroides tratamientoDe hemorroides tratamiento
De hemorroides tratamientoeshacersea
 
Tutorial Google books
 Tutorial Google books Tutorial Google books
Tutorial Google books1975alex
 
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tabletsConsejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tabletsMotorola Mobility - MOTODEV
 
Direito penal iii crimes contra a inviolabilidade de correspondência
Direito penal iii   crimes contra a inviolabilidade de correspondênciaDireito penal iii   crimes contra a inviolabilidade de correspondência
Direito penal iii crimes contra a inviolabilidade de correspondênciaUrbano Felix Pugliese
 
Programas y Herramientas de Google para emprendedores
Programas y Herramientas de Google para emprendedoresProgramas y Herramientas de Google para emprendedores
Programas y Herramientas de Google para emprendedoresJuan José Rodriguez MsC.
 
List view y UI en Android
List view y UI en AndroidList view y UI en Android
List view y UI en AndroidByron Andres
 
Qué es y cómo funciona FounderList - 02-04-2016
Qué es y cómo funciona FounderList - 02-04-2016Qué es y cómo funciona FounderList - 02-04-2016
Qué es y cómo funciona FounderList - 02-04-2016FounderList
 
La Realidad Aumentada como herramienta para mejorar los procesos educativos e...
La Realidad Aumentada como herramienta para mejorar los procesos educativos e...La Realidad Aumentada como herramienta para mejorar los procesos educativos e...
La Realidad Aumentada como herramienta para mejorar los procesos educativos e...Juan José Rodriguez MsC.
 
Guías de diseño para apps en Android 4
Guías de diseño para apps en Android 4Guías de diseño para apps en Android 4
Guías de diseño para apps en Android 4Mauricio Angulo
 

Viewers also liked (17)

FusionCharts Clockworks
FusionCharts ClockworksFusionCharts Clockworks
FusionCharts Clockworks
 
An Approach to Digital Marketing
An Approach to Digital MarketingAn Approach to Digital Marketing
An Approach to Digital Marketing
 
Lo2 pitch
Lo2 pitchLo2 pitch
Lo2 pitch
 
Tic´s google +
Tic´s google +Tic´s google +
Tic´s google +
 
Primera clase configuración del EVA
Primera clase configuración del EVAPrimera clase configuración del EVA
Primera clase configuración del EVA
 
De hemorroides tratamiento
De hemorroides tratamientoDe hemorroides tratamiento
De hemorroides tratamiento
 
google aps
google apsgoogle aps
google aps
 
Tutorial Google books
 Tutorial Google books Tutorial Google books
Tutorial Google books
 
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tabletsConsejos principales para Android UI Cómo alcanzar la magia en los tablets
Consejos principales para Android UI Cómo alcanzar la magia en los tablets
 
Fenómeno de Google
Fenómeno de GoogleFenómeno de Google
Fenómeno de Google
 
Servicios de google
Servicios de googleServicios de google
Servicios de google
 
Direito penal iii crimes contra a inviolabilidade de correspondência
Direito penal iii   crimes contra a inviolabilidade de correspondênciaDireito penal iii   crimes contra a inviolabilidade de correspondência
Direito penal iii crimes contra a inviolabilidade de correspondência
 
Programas y Herramientas de Google para emprendedores
Programas y Herramientas de Google para emprendedoresProgramas y Herramientas de Google para emprendedores
Programas y Herramientas de Google para emprendedores
 
List view y UI en Android
List view y UI en AndroidList view y UI en Android
List view y UI en Android
 
Qué es y cómo funciona FounderList - 02-04-2016
Qué es y cómo funciona FounderList - 02-04-2016Qué es y cómo funciona FounderList - 02-04-2016
Qué es y cómo funciona FounderList - 02-04-2016
 
La Realidad Aumentada como herramienta para mejorar los procesos educativos e...
La Realidad Aumentada como herramienta para mejorar los procesos educativos e...La Realidad Aumentada como herramienta para mejorar los procesos educativos e...
La Realidad Aumentada como herramienta para mejorar los procesos educativos e...
 
Guías de diseño para apps en Android 4
Guías de diseño para apps en Android 4Guías de diseño para apps en Android 4
Guías de diseño para apps en Android 4
 

Similar to S5 android ui

"Android de la A a la Z" -- Unidad 10
"Android de la A a la Z" -- Unidad 10"Android de la A a la Z" -- Unidad 10
"Android de la A a la Z" -- Unidad 10Android UNAM
 
Tema 4 3_2_interfaces_de_usuario
Tema 4 3_2_interfaces_de_usuarioTema 4 3_2_interfaces_de_usuario
Tema 4 3_2_interfaces_de_usuarioCarlos A. Iglesias
 
Sesion 11 Teoria.pdf
Sesion 11 Teoria.pdfSesion 11 Teoria.pdf
Sesion 11 Teoria.pdfDianaSullcav
 
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...leofishman
 
CLASE MUESTRA.pptx
CLASE MUESTRA.pptxCLASE MUESTRA.pptx
CLASE MUESTRA.pptxAdrinGarca77
 
Trucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.FormsTrucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.FormsJavier Suárez Ruiz
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"Alberto Ruibal
 
Interfaces increibles en Android
Interfaces increibles en AndroidInterfaces increibles en Android
Interfaces increibles en Androidjezabelink
 
curso android tema 3
curso android tema 3curso android tema 3
curso android tema 3Frank Jorge
 

Similar to S5 android ui (20)

"Android de la A a la Z" -- Unidad 10
"Android de la A a la Z" -- Unidad 10"Android de la A a la Z" -- Unidad 10
"Android de la A a la Z" -- Unidad 10
 
Tema 4 3_2_interfaces_de_usuario
Tema 4 3_2_interfaces_de_usuarioTema 4 3_2_interfaces_de_usuario
Tema 4 3_2_interfaces_de_usuario
 
Android Superstar - Buenas Prácticas
Android Superstar - Buenas PrácticasAndroid Superstar - Buenas Prácticas
Android Superstar - Buenas Prácticas
 
Controles y Objetos Android Studio (Actualizada 2016)
Controles y Objetos Android Studio (Actualizada 2016)Controles y Objetos Android Studio (Actualizada 2016)
Controles y Objetos Android Studio (Actualizada 2016)
 
Sesion 11 Teoria.pdf
Sesion 11 Teoria.pdfSesion 11 Teoria.pdf
Sesion 11 Teoria.pdf
 
Preguntasviri
PreguntasviriPreguntasviri
Preguntasviri
 
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
ANDROID BOOTCAMP 101: MI PRIMERA APLICACIÓN ANDROID - CÓMO INICIAR UN EMPREND...
 
CLASE MUESTRA.pptx
CLASE MUESTRA.pptxCLASE MUESTRA.pptx
CLASE MUESTRA.pptx
 
Swing intefaz grafica de usuario
Swing intefaz grafica de usuarioSwing intefaz grafica de usuario
Swing intefaz grafica de usuario
 
Preguntas de android
Preguntas  de androidPreguntas  de android
Preguntas de android
 
Preguntas de android
Preguntas  de androidPreguntas  de android
Preguntas de android
 
Trucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.FormsTrucos y consejos rendimiento Xamarin.Forms
Trucos y consejos rendimiento Xamarin.Forms
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"
 
Interfaces increibles en Android
Interfaces increibles en AndroidInterfaces increibles en Android
Interfaces increibles en Android
 
Preguntas android
Preguntas androidPreguntas android
Preguntas android
 
Preguntas sobre android
Preguntas sobre androidPreguntas sobre android
Preguntas sobre android
 
Android
AndroidAndroid
Android
 
Preguntas android
Preguntas androidPreguntas android
Preguntas android
 
curso android tema 3
curso android tema 3curso android tema 3
curso android tema 3
 
Portafolio
PortafolioPortafolio
Portafolio
 

S5 android ui

  • 1. M.Sc(c) Jaime Caicedo Guerrero DESARROLLO DE APLICACIONES PARA DISPOSITIVOS MOVILES M.Sc (c). Jaime Caicedo Guerrero jcaicedo@unicauca.edu.co
  • 2. M.Sc(c) Jaime Caicedo Guerrero Introducción • Actividad (android.app.Activity) -> unidad básica de funcionalidad de una aplicación Android. • Para darle a las Actividades presencia en la pantalla y diseñar su interfaz de usuario, hay que trabajar con vistas (Views) y grupos de vistas (Viewgroups), unidades básicas de la interfaz de usuario en la plataforma Android.
  • 3. M.Sc(c) Jaime Caicedo Guerrero Introducción Vistas (View) • Una vista es un objeto de clase base android.view.View. Es una estructura de datos cuyas propiedades guardan la disposición y contenido para un área rectangular específica de la pantalla. Un objeto vista (View) maneja la medida y disposición, dibujado, cambio de foco, scroll y pulsaciones de teclas para el área de pantalla a la que representa. • La clase View sirve como clase base para los widgets, un conjunto de subclases completamente implementadas que dibujan elementos interactivos en la pantalla. Los widgets manejan sus propias medidas y forma: Text (Para mostrar texto), EditText (Para que el usuario introduzca texto), Button (Botón), RadioButton (Para seleccionar una opción de un grupo de ellas),Checkbox (Para seleccionar una o más opciones de un conjunto.) …
  • 4. M.Sc(c) Jaime Caicedo Guerrero Introducción Grupos de vistas (Viewgroup) • Un grupo de vistas es un objeto de la clase android.view.Viewgroup. Como su nombre indica, un grupo de vistas es un tipo especial de objeto Vista cuya función es contener y organizar un subconjunto de vistas y otros grupos de vistas. Los grupos de vistas permiten añadir estructura a la interfaz de usuario y construir elementos de pantalla complejos que puedan ser referenciados como una sola entidad. • La clase Viewgroup sirve como clase base para los layouts, un conjunto de subclases implementadas que ofrecen tipos comunes de disposiciones en pantalla. Los layouts ofrecen una forma de construir una estructura para un conjunto de vistas.
  • 5. M.Sc(c) Jaime Caicedo Guerrero Introducción Actividad setContentView()
  • 6. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets básicos • Labels -> TextView <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Ejemplo de un TextView en Android" android:id="@+id/label" android:textStyle="bold"/> TextViewExample.java
  • 7. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets básicos • Imágenes -> ImageView <?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/icon" android:layout_width="fill_parent" android:layout_height="fill_parent" android:adjustViewBounds="true" android:src="@drawable/molecule" /> ImageViewExample.java
  • 8. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets básicos • Campos de Texto -> EditText <?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/field" android:layout_width="fill_parent" android:layout_height="fill_parent" android:autoText="true" android:singleLine="false"/> Algunas propiedades: android:autoText android:capitalize android:numeric android:password EditTextExample.java
  • 9. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets básicos • Campos de chequeo -> Checkbox <?xml version="1.0" encoding="utf-8"?> <CheckBox xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Este campo de chequeo se encuentra: unchecked" /> Algunos métodos importantes: isChecked() determinar el estado del Checkbox setChecked() fijar el estado del Checkbox toggle() chequear el Checkbox, simulando una acción del usuario CheckBoxExample.java
  • 10. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets básicos Botones de selección-> RadioGroup, RadioButton <RadioGroup xmlns:android="http://schemas.android.com/apk/r es/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <RadioButton android:id="@+id/radio1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Rock" /> <RadioButton android:id="@+id/radio2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Salsa" android:checked="true"/> <RadioButton android:id="@+id/radio3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pop" /> </RadioGroup> Algunos métodos importantes: check() chequear un RadioButton a través de su ID clearCheck() clarear todos los Radio Buttons getCheckedRadioButtonId() obtener el Id del radioButton chequeado(-1 si ninguno se encuentra seleccionado) RadioButtonExample.java
  • 11. M.Sc(c) Jaime Caicedo Guerrero Android UI - Contenedores Alojan varios componentes de Vista (View) o Grupos de Vista (ViewGroup). Clase ViewGroup.LayoutParams
  • 12. M.Sc(c) Jaime Caicedo Guerrero Android UI - Contenedores LinearLayout Los componentes son “alineados” en una columna o fila, uno detrás de otro. Gestiona las siguientes propiedades: • Orientation: Si representa una columna o fila (android:orientation _horizontal|vertical). • Fill Model: Hace referencia al llenado del espacio del componente.(android:layout_width,android:layout_height): – wrap_content: El componente debe llenar su espacio naturalmente. – fillparent: - el componente debe llenar el espacio restante en el contenedor • Weight: prioridad en la repartición de espacio entre dos o más componentes.
  • 13. M.Sc(c) Jaime Caicedo Guerrero Android UI - Contenedores LinearLayout • Gravity: alinear el componente de forma diferente a sus valores por defecto (left, top-aligned) (android:layout_gravity). • Padding: incrementar el espacio por defecto entre los componentes (android:padding). LinearLayoutExample.java
  • 14. M.Sc(c) Jaime Caicedo Guerrero Android UI - Contenedores RelativeLayout Organiza los widgets con relación al contenedor padre o con relación a otros widgets. • Posiciones relativas al contenedor: – android:layout_alignParentTop – parte alta del contenedor – android:layout_alignParentBottom – parte baja del contenedor – android:layout_alignParentLeft - lado izquierdo del contenedor – android:layout_alignParentRight – lado derecho del contenedor – android:layout_centerHorizontal – horizontalmente en el centro del contenedor – android:layout_centerVertical – verticalmente en el centro del contenedor – android:layout_centerInParent – horizontal y verticalmente en el centro del contenedor
  • 15. M.Sc(c) Jaime Caicedo Guerrero Android UI - Contenedores RelativeLayout • Posiciones relativas a otros widgets: Se requiere definir id para todos los componentes. Un widget B se puede referir a un widget A con id @+id/widget_a a través de @id/widget_a. – android:layout_above – arriba del widget referenciado – android:layout_below – abajo del widget referenciado – android:layout_toLeft – a la izquierda del widget referenciado – android:layout_toRight – a la derecha del widget referenciado – android:layout_alignTop – alinear parte alta widget A – parte alta widget B – android:layout_alignBottom – alinear parte baja widget A – parte baja widget B – android:layout_alignLeft – alinear izquierda widget A – izquierda widget B – android:layout_alignRight - alinear derecha widget A – derecha widget B – android:layout_alignBaseline – alínear líneas de base de los widgets – android:layout_toRight – alinear a la derecha del widget referenciado RelativeLayoutExample.java
  • 16. M.Sc(c) Jaime Caicedo Guerrero Android UI - Contenedores TableLayout Permite posicionar los widgets en una tabla de acuerdo a la elección del desarrollador. Trabaja con un contenedor interno: TableRow. Existe control absoluto sobre la definición de filas; las columnas son gestionadas por Android y se tiene un control indirecto. • Algunas propiedades útiles: – android:layout_span – número de columnas que puede ocupar un widget – android:layout_column – fijar la columna de inicio de un widget – android:stretchColumns – expandir una o más columnas para usar el espacio sobrante (contenido ocupa menos espacio que el disponible) -> setColumnStretchable(). – android:shrinkColumns – comprimir una o más columnas para utilizar el espacio en pantalla (contenido ocupa más espacio que el disponible) -> setColumnShrinkable(). – android:collapseColumns – ocultar una o más columnas -> setColumnCollapsed(). TableLayoutExample.java
  • 17. M.Sc(c) Jaime Caicedo Guerrero Android UI - Contenedores ScrollView Variante de TableLayout. Proporciona capacidades de scrolling para el contenido en la pantalla. Mantiene la integridad en la información de la tabla, pero sólo se visualiza una parte de la misma. ScrollViewExample.java
  • 18. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección • Premisa básica: los elementos de selección son preferidos sobre los elementos de ingreso de texto, pese a las capacidades de restricción de contenido que éstos pueden ofrecer. • Android ofrece un conjunto de adaptadores de datos que ofrecen una interfaz de datos común para alimentar el contenido de este tipo de widgets. Convierten los datos en datos visibles a través de vistas de selección.
  • 19. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección Uso de ArrayAdapter: • Parámetros: – El Contexto a utilizar (típicamente la instancia de la Actividad actual). – El Id del recurso de la vista a usar – El arreglo de items de datos que se va a utilizar
  • 20. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección Instanciación de ArrayAdapter: (override del método getView) • Parámetros: – Index del item en el arreglo que se desea desplegar en la vista – Una vista existente para actualizar los datos en la posición deseada. – El widget que contendrá la vista
  • 21. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección • ListView -> control ListBox clásico en Android La actividad puede extender de ListActivity en lugar de Activity. El método SetListAdapter(), permite fijar el ArrayAdapter que se desea utilizar. ListViewExample.java
  • 22. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección • SpinControl -> control ComboBox clásico en Android setDropDownViewResource() enlace a un recurso específico para configurar la apariencia del control. SpinnerExample.java
  • 23. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección • GridView -> Vista de selección en dos dimensiones Algunas propiedades: • android:numColumns: número de columnas (autofit -> ajuste automático) • android:verticalSpacing, android:horizontalSpacing: controla el espacio entre los items de la grilla. • android:columnWidth: indica el ancho de las columnas.
  • 24. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección • GridView -> Vista de selección en dos dimensiones GridViewExample.java
  • 25. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección • AutoCompleteView -> Híbrido entre EditView y Spinner con propósitos de predicción de Texto. AutoCompleteViewExample.java <AutoCompleteTextView android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:completionThreshold="3"/> No soporta listeners de selección Sugerencia: Registro de un TextWatcher
  • 26. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección • Gallery -> Control de lista desplazable horizontalmente. (Uso frecuente: galería de fotos) GalleryExample.java <Gallery android:id="@+id/galleryCtrl" android:layout_width="fill_parent" android:layout_height="wrap_content" /> Manejo similar a una lista: 1. Se obtiene una referencia al Gallery 2. Se fija el adaptador para los datos 3. Se registra el manejo de eventos
  • 27. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección • Mejorando el widget ListView – Cómo adicionar íconos a la lista? La clave está en la modificación del ArrayAdapter! IconListViewExample.java
  • 28. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de selección • Mejorando el widget ListView – Qué sucede si se requiere varios tipos de íconos? O – No todas las filas usan el mismo layout (algunas una línea de texto, otras dos)? El concepto de Inflación (“Inflation”): convertir la especificación de un layout XML en el árbol de objetos View que representa. Concepto implementado internamente por Android a través de la clase “ViewInflate”. Permite la manipulación de cada objeto View del layout para dar la apariencia buscada. MultipIeIconListViewExample.java
  • 29. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de Fecha/Hora • DatePicker, DatePickerDialog – Introducción de fecha en el formato año, mes (0 - 11), día. – Proporciona un objeto callback OnDateSetListener que informa sobre una nueva fecha seleccionada por el usuario. • TimePicker, TimePickerDialog – Fijar la hora en el formato Hora (0 - 23), Minuto (0 - 59). – Fijar el formato de la hora (AM/PM – 24H) – Proporciona un objeto callback OnTimeSetListener que informa sobre una nueva hora seleccionada por el usuario.
  • 30. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de Fecha/Hora DateTimeExample.java
  • 31. M.Sc(c) Jaime Caicedo Guerrero Android UI – Widgets de Fecha/Hora • DigitalClock, AnalogClock – Diseñado con propósitos de despliegue de fecha/hora y no de introducción de información. <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/a ndroid" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <AnalogClock android:id="@+id/analog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_alignParentTop="true" /> <DigitalClock android:id="@+id/digital" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_below="@id/analog" /> </RelativeLayout> ClockExample.java
  • 32. M.Sc(c) Jaime Caicedo Guerrero Android UI - Tabs • Facilita el despliegue de información a través de varias pantallas gestionadas por la actividad (pestañas). Componentes: TabWidget: Implementa la fila de tab buttons (incluye labels y opcionalmente íconos). TabHost: Contenedor para los botones de los Tabs y el contenido de los mismos. FrameLayout: Contenedor para el contenido de los Tabs.
  • 33. M.Sc(c) Jaime Caicedo Guerrero Android UI - Tabs Algunas reglas básicas: • El TabWidget debe tener un identificador de la forma @android:id/tabs. • Evitar el padding en el FrameLayout para los tab buttons • Si se desea usar la clase TabActivity el TabHost debe tener un id de la forma @android:id/tabhost.
  • 34. M.Sc(c) Jaime Caicedo Guerrero Android UI - Tabs Construcción de los Tabs: El código Java debe informar al TabHost qué vistas corresponden al contenido de los tabs y cómo deben lucir los tab buttons -> objetos TabSpec. Métodos esenciales: • setContent(): inidica el contenido del tab (android:id de la vista específica). • setIndicator(): proporciona las etiquetas para los tab buttons (opcionalmente se incluye un drawable para representar íconos). • setup(): método invocado en el TabHost (no requerido si la clase base de la actividad es TabActivity)
  • 35. M.Sc(c) Jaime Caicedo Guerrero Android UI - Tabs <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"> <AnalogClock android:id="@+id/tab1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerHorizontal="true" /> <Button android:id="@+id/tab2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="Tab del botón" /> </FrameLayout> </LinearLayout> </TabHost> TabExample.java
  • 36. M.Sc(c) Jaime Caicedo Guerrero Android UI – Menús contextuales • Información adicional asociada a un widget específico. • Dos sabores: Menú de opciones (accesible al presionar el botón hardware del dispositivo), Menú contextual (presionar y sostener sobre el widget que lo despliega). • Creación del menú: onCreateOptionsMenu() -> recibe una instancia de Menu. • super.onCreateOptionsMenu(menu) -> Asegurar que el framework Android adicione las opciones necesarias.
  • 37. M.Sc(c) Jaime Caicedo Guerrero Android UI – Menús contextuales • Adición de opciones al Menú -> método add (). – Un identificador de grupo (int): generalmente 0. – Un identificador para la opción (int): identificar la opción seleccionada durante un callback a onOptionsItemSelected(). – Etiqueta para la opción. – Los identificadores de la opción deben ser referidos a la constante FIRST.
  • 38. M.Sc(c) Jaime Caicedo Guerrero Android UI – Menús contextuales • Vinculación del menú al widget – El menú está asociado a un widget y no a una actividad específica. – onPopulateContextMenu(): permite fijar el contenido del menú y asociar la Vista (View) correspondiente. – onContextItemSelected(),onOptionsItemSelected(): permite acceder a la información cuando una opción del menú es seleccionada. Implementado en la Actividad.
  • 39. M.Sc(c) Jaime Caicedo Guerrero Android UI – Menús contextuales <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a ndroid" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/selection" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#eeeeee"/> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:drawSelectorOnTop="false" /> </LinearLayout> MenuExample.java
  • 40. M.Sc(c) Jaime Caicedo Guerrero Android UI – Mensajes y Alertas • Usados generalmente con propósitos de notificación. • Dos tipos de mensajes definidos por Android: – Toast: mensaje transitorio (tiempo fijo), desaparece sin intervención del usuario. – AlertDialog: mensaje de diálogo estilo modal (requiere la intervención del usuario para desaparecer la pantalla).
  • 41. M.Sc(c) Jaime Caicedo Guerrero Android UI – Mensajes y Alertas Toast: • Se configura a través del método estático makeText(): – Contexto: actividad a la cual está asociado. – Cadena del mensaje: (String)mensaje a ser desplegado (opc. resource id). – Duración: referido a las constantes LENGTH_SHORT y LENGTH_LONG • show(): despliega el toast.
  • 42. M.Sc(c) Jaime Caicedo Guerrero Android UI – Mensajes y Alertas AlertDialog: • Construido a partir de la clase Builder: – setMessage(): cuerpo del mensaje. – setTitle(), setIcon(): texto del título e ícono asociado al diálogo. – setPositiveButton(), setNeutralButton(), and setNegativeButton() : configuración general del botón del diálogo (etiqueta, lógica de la acción). – show(): desplegar el diálogo.
  • 43. M.Sc(c) Jaime Caicedo Guerrero Android UI – Mensajes y Alertas <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/alert" android:text="Ver Alert" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <Button android:id="@+id/toast" android:text="Ver Toast" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout> MessageExample.java
  • 44. M.Sc(c) Jaime Caicedo Guerrero Android UI – Barras de progreso Introducción al manejo de Threads • Operaciones que consumen altos recursos de procesamiento -> interfaces congeladas. • Android proporciona un conjunto de medios que permite a hilos en background interactuar de forma segura con el UI Thread: • Objetos Handler, Runnable y UIThreadUtilities.
  • 45. M.Sc(c) Jaime Caicedo Guerrero Android UI – Barras de progreso Introducción al manejo de Threads • Handlers – Sólo se requiere un Handler por Actividad y no se requiere un registro manual. – El hilo en background puede comunicarse con el Handler, el cual realizará todo su trabajo en el UI Thread de la Actividad (las actualizaciones de los widgets ocurren en este hilo). – Dos formas de comunicarse directamente con los Handlers: objetos Message y Runnable.
  • 46. M.Sc(c) Jaime Caicedo Guerrero Android UI – Barras de progreso Introducción al manejo de Threads • Handlers – Primer paso: obtener un manejador del pool de mensajes -> obtainMessage(). – Enviar el mensaje a través de la familia de métodos disponibles: – sendMessage(): pone un mensaje en el pool de forma inmediata. – sendMessageAtFrontOfQueue(): pone un mensaje en el pool de forma inmediata y prioritaria. – sendMessageAtTime(): pone el mensaje en el pool en el tiempo fijado. – sendMessageDelayed(): pone el mensaje en el pool, después del retardo fijado. – El Handler debe implementar handleMessage() para gestionar el arrivo de mensajes en el pool.
  • 47. M.Sc(c) Jaime Caicedo Guerrero Android UI – Barras de progreso Fijando un Handler para gestionar una barra de progreso ProgressBarExample.java
  • 48. M.Sc(c) Jaime Caicedo Guerrero Android UI - Navegación Introducción a los Intents • Forma de representar una acción a través de mensajes. • La forma de comunicación en Android funciona alrededor de “intents” y receptores de “intents”. URL GET Recurso Acción + Contexto Acción Android Intents + La Web
  • 49. M.Sc(c) Jaime Caicedo Guerrero Android UI - Navegación Introducción a los Intents • Dos componentes principales: la “acción” y los “datos”. • Otros criterios que pueden agregarse: – Una categoría: la actividad principal está en la categoría LAUNCHER, indicando que debe ser accesible desde el menú principal desde donde se lanzan las aplicaciones. Otras actividades pueden pertenecer a categorías como DEFAULT o ALTERNATIVE. – Un tipo MIME: indicando el tipo de recurso sobre el cual se desea operar. – Un componente: la clase de la actividad que actúa como receptora del intent. – Extras: conjunto (Bundle) del que hace parte cualquier otra información que se desee enviar al receptor del Intent.
  • 50. M.Sc(c) Jaime Caicedo Guerrero Android UI - Navegación Algunas acciones • ANSWER_ACTION • CALL_ACTION • DELETE_ACTION • DIAL_ACTION • EDIT_ACTION • VIEW_ACTION • GET_CONTENT_ACTION • INSERT_ACTION • MAIN_ACTION • PICK_ACTION Algunas categorías • ALTERNATIVE_CATEGORY • BROWSABLE_CATEGORY • DEFAULT_CATEGORY • GADGET_CATEGORY • HOME_CATEGORY • LAUNCHER_CATEGORY • PREFERENCE_CATEGORY • SELECTED_ALTERNATIVE_CATEGORY • TAB_CATEGORY • TEST_CATEGORY Introducción a los Intents
  • 51. M.Sc(c) Jaime Caicedo Guerrero Android UI - Navegación Introducción a los Intents Algunas reglas básicas: • La actividad debe soportar la acción especificada. • La actividad debe soportar el tipo MIME establecido. • La actividad debe soportar las categorías establecidas en el Intent. Intent filters
  • 52. M.Sc(c) Jaime Caicedo Guerrero Android UI - Navegación Introducción a los Intents • Intent filters Actividad principal de la aplicación Accesible desde el menú principal
  • 53. M.Sc(c) Jaime Caicedo Guerrero Android UI - Navegación Uso de Intents para navegación entre pantallas • Construir el intent: haciendo referencia a la Actividad específica que se desea lanzar o a una URI. • Realizar el llamado: invocar el método startActivity() referido al intent creado.
  • 54. M.Sc(c) Jaime Caicedo Guerrero Android UI - Navegación Uso de Intents para navegación entre pantallas NavigateList.java NavigateClock.java Servidor Proxy?
  • 55. M.Sc(c) Jaime Caicedo Guerrero Android – Carga del emulador usando Proxy Importante: Si el acceso a Internet por parte del emulador se da a través de un servidor proxy, esta configuración debe ser realizada durante el lanzamiento del emulador de la siguiente manera: C:android-sdk-windowstools>emulator -avd Default -http-proxy http://proxy.unicauca.edu.co:3128
  • 56. M.Sc(c) Jaime Caicedo Guerrero Jaime Caicacedo Guerrero jcaicedo@unicauca.edu.co Of. 405 ext. 2127
  • 57. M.Sc(c) Jaime Caicedo Guerrero ¡Gracias! Jaime Caicedo Guerrero jcaicedo@unicauca.edu.co Of. 405 ext. 2127