Está en la página 1de 39

Android:

Fundamentos de la Creacion de Aplicaciones


Redes, Aplicaciones y Servicios en Internet (RASI)
Departamento de Sistemas Telematicos y Computacion (GSyC)

Octubre de 2009

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

c
2009
Grupo de Sistemas y Comunicaciones.
Algunos derechos reservados.
Este trabajo se distribuye bajo la licencia
Creative Commons Attribution Share-Alike
disponible en http://creativecommons.org/licenses/by-sa/2.1/es

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

Contenidos
1

El Manifiesto de una Aplicaci


on Android

Creaci
on y destrucci
on de Aplicaciones y Actividades

Recursos de las Aplicaciones Android

Creaci
on de Interfaces de Usuario: Views

Creaci
on de Interfaces de Usuario: Layouts

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creaci
on de Interfaces de Usuario: Creaci
on de Controles Compuestos

Creaci
on de Interfaces de Usuario: Men
us

Bibliografa

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

El Manifiesto de una Aplicaci


on Android

Contenidos
1

El Manifiesto de una Aplicaci


on Android

Creaci
on y destrucci
on de Aplicaciones y Actividades

Recursos de las Aplicaciones Android

Creaci
on de Interfaces de Usuario: Views

Creaci
on de Interfaces de Usuario: Layouts

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creaci
on de Interfaces de Usuario: Creaci
on de Controles Compuestos

Creaci
on de Interfaces de Usuario: Men
us

Bibliografa

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

El Manifiesto de una Aplicaci


on Android

Componentes de las Aplicaciones Android


Actividades (Activities): Cada pantalla de una aplicaci
on. Utilizan Vistas
(Views) como componentes que muestran informaci
on y responden a las
acciones del usuario
Servicios (Services): Componentes de la aplicaci
on que se ejecutan de
forma invisible, actualizando los datos y las Actividades, y disparando
Notificaciones. Realizan el procesamiento normal de la aplicaci
on que debe
continuar incluso cuando las Actividades de la aplicaci
on no estan visibles.
Proveedores de Contenidos (Content Providers): Almacenes de datos
compartidos. Gestionan las Bases de Datos para las aplicaciones.
Intenciones (Intents): Mecanismo que permite el paso de mensajes
destinados a ciertas Actividades o Servicios, o a todo el sistema
(Intenciones de broadcast). Exponen la intenci
on de que se haga algo. El
sistema determinara el destinatario que lo efectuara.
Receptores de Broadcast (Broadcast Receivers): Los crean las aplicaciones
como consumidores de las Intenciones de broadcast que cumplan ciertos
criterios.
Notificaciones (Notifications): Mecanismo que permite a las aplicaciones
se
nalar algo a los usuarios sin interrumpir la Actividad en primer plano.
GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

El Manifiesto de una Aplicaci


on Android

El Manifiesto de una Aplicacion (I)


Cada Aplicaci
on incluye un fichero de Manifiesto,
AndroidManifest.xml.
Define la estructura de la aplicacion y sus componentes.
Incluye un nodo raz y un nodo para cada uno de sus tipos de
componentes.
A traves de filtros de intenciones y permisos determina
c
omo interactuara con otras aplicaciones.
Nodo raz manifest: incluye el nombre del paquete de la
aplicaci
on:
1
3

<m a n i f e s t x m l n s : a n d r o i d=h t t p : // s ch e ma s . a n d r o i d . com/ apk / r e s / a n d r o i d


p a c k a g e=com . my domain . my app >
[ . . . m a n i f e s t nodes . . . ]
</ m a n i f e s t>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

El Manifiesto de una Aplicaci


on Android

El Manifiesto de una Aplicacion (II)


Nodo application:

Indica metadatos de la aplicacion (ttulo, icono, tema)


Contiene los nodos de actividades, servicios, proveedores de
contenidos y receptores de broadcast.

2
4
6
8
10
12
14
16
18
20

<a p p l i c a t i o n a n d r o i d : i c o n= @ d r a w a b l e / i c o n
a n d r o i d : t h e m e= @ s t y l e / my theme >
<a c t i v i t y a n d r o i d : n a m e= . M y A c t i v i t y a n d r o i d : l a b e l= @ s t r i n g / app name >
<i n t e n t f i l t e r>
<a c t i o n a n d r o i d : n a m e= a n d r o i d . i n t e n t . a c t i o n . MAIN />
<c a t e g o r y a n d r o i d : n a m e= a n d r o i d . i n t e n t . c a t e g o r y . LAUNCHER />
</ i n t e n t f i l t e r>
</ a c t i v i t y>
<a c t i v i t y . . . >
...
</ a c t i v i t y>
<s e r v i c e . . . >
...
</ s e r v i c e>
...
</ a p p l i c a t i o n>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

El Manifiesto de una Aplicaci


on Android

El Manifiesto de una Aplicacion (III)


Nodo uses-permission:
Declara los permisos que la aplicacion necesita para operar.
Seran presentados al usuario durante la instalacion para que
los acepte o deniegue.
Se requieren permisos para utilizar muchos de los servicios
nativos Android (enviar SMS, hacer llamadas, usar servicios de
localizacion. . . )
Permisos mas habituales: INTERNET, READ_CONTACTS,
WRITE_CONTACTS, RECEIVE_SMS, SEND_SMS,
ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION

<u s e sp e r m i s s i o n a n d r o i d : n a m e= a n d r o i d . p e r m i s s i o n . ACCESS FINE LOCATION>


</ u s e sp e r m i s s i o n>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

El Manifiesto de una Aplicaci


on Android

El Manifiesto de una Aplicacion (IV)

Nodo permission:
Define un permiso que se requiere para que otras aplicaciones
puedan acceder a partes restringidas de la aplicacion
Las otras aplicaciones necesitaran poner un uses-permission
en su Manifiesto para utilizar este permiso

2
4

<p e r m i s s i o n a n d r o i d : n a m e=com . r a s i . DETONATE DEVICE


a n d r o i d : p r o t e c t i o n L e v e l= d a n g e r o u s
a n d r o i d : l a b e l= S e l f D e s t r u c t
a n d r o i d : d e s c r i p t i o n= @ s t r i n g / d e t o n a t e d e s c r i p t i o n >
</ p e r m i s s i o n>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

El Manifiesto de una Aplicaci


on Android

El Manifiesto de una Aplicacion (V)

Nodo instrumentation:
Permite definir tests de ejecucion para las Actividades y
Servicios.
1
3

<i n s t r u m e n t a t i o n a n d r o i d : l a b e l=My T e s t
a n d r o i d : n a m e= . M y T e s t C l a s s
a n d r o i d : t a r g e t P a c k a g e=com . r a s i . aP ac ka ge >
</ i n s t r u m e n t a t i o n>

Mas informaci
on sobre el manifiesto en:
http://code.google.com/android/devel/bblocks-manifest.html

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

10

Creaci
on y destrucci
on de Aplicaciones y Actividades

Contenidos
1

El Manifiesto de una Aplicaci


on Android

Creaci
on y destrucci
on de Aplicaciones y Actividades

Recursos de las Aplicaciones Android

Creaci
on de Interfaces de Usuario: Views

Creaci
on de Interfaces de Usuario: Layouts

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creaci
on de Interfaces de Usuario: Creaci
on de Controles Compuestos

Creaci
on de Interfaces de Usuario: Men
us

Bibliografa

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

11

Chapter 3: Creating Applications and Activities

Creaci
on y destrucci
on de Aplicaciones y Actividades

The Activity Life Cycle


Aplicaciones,
Actividades y Pila de Actividades
A good understanding of the Activity life cycle is vital to ensure that your application provides a seamless user experience and properly manages its resources.
As explained earlier, Android applications do not control their own process lifetimes; the Android run

Las time
Aplicaciones
Android
no son
lasof each
aplicaciones
en los sistemas
manages the process
of each application,
andiguales
by extensionathat
Activity within it.
operativos
tradicionales:
s
o
lo
hay
una
en
primer
plano
que
normalmente
While the run time handles the termination and management of an Activitys process, the Activitys
state helps determine the priority of its parent application. The application priority, in turn, influences
ocupa
toda la pantalla.
the likelihood that the run time will terminate it and the Activities running within it.
Las Aplicaciones estan formadas por Actividades (pantallas).
Activity Stacks
Al arrancar
una nueva aplicacion, pasa a primer plano situando una
The state of each Activity is determined by its position on the Activity stack, a last-infirst-out collection
of all the currently running Activities. When a new Activity starts, the current foreground screen is
Actividad
encima
de la que hubiera, formandose as una Pila de
moved to the top of the stack. If the user navigates back using the Back button, or the foreground Activity
is
closed,
the
next
Activity
on the stack moves up and becomes active. This process is illustrated in
Actividades.
Figure 3-7.
El bot
on Back (-) cierra la Actividad en primer plano y recupera la de la
As described previously in this chapter, an applications priority is influenced by its highest-priority
cimaActivity.
de laThePila
(cerrando
la uses
aplicaci
oton determine
en su the
caso).
Android
memory manager
this stack
priority of applications based
on their Activities when deciding which application to terminate to free resources.
New Activity

Active Activity
New Activity
started

Back button
pushed or
activity closed

Last Active Activity

Removed to
free resources
Previous Activities
Activity Stack

Figure 3-7

GSyC - 2009

Activity States

Android: Fundamentos de la Creaci


on de Aplicaciones

As activities are created and destroyed, they move in and out of the stack shown in Figure 3-7. As they
do so, they transition through four possible states:

12

Creaci
on y destrucci
on de Aplicaciones y Actividades

Aplicaciones y procesos
Las aplicaciones Android no tienen control sobre su propio
ciclo de vida:
deben estar pendientes de posibles cambios en su estado y
reaccionar como corresponda
en particular, deben estar preparadas para que su terminacion
en cualquier momento

En general, cada aplicacion Android se ejecuta en un proceso


que ejecuta una instancia de Dalvik.
Android mata sin previo aviso los procesos que considera
necesarios cuando lo considera necesario para mantener el
sistema responsivo.
El runtime de Android gestiona el proceso de cada aplicacion,
y por extensi
on de cada Actividad que contenga.

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

13

Creaci
on y destrucci
on de Aplicaciones y Actividades

Aplicaciones, Actividades, Vistas, Disenos


Una Actividad representa una pantalla que una aplicacion
muestra a sus usuarios (equivalente al concepto de Form en
aplicaciones de escritorio convencionales).
La mayora de las Actividades ocupan toda la pantalla del
dispositivo, pero pueden crearse actividades
semi-transparentes, flotantes o que utilizan cajas de dialogo.
Para crear una nueva Actividad en una aplicacion se hereda de
la clase Activity.
Las Interfaz de Usuario de una Actividad se crea mediante
Vistas (Views) (equivalentes al concepto de Widgets en
aplicaciones de escritorio convencionales).
Las Vistas se agrupan en Dise
nos (Layouts) que mostrara la
aplicaci
on.
GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

14

Creaci
on y destrucci
on de Aplicaciones y Actividades

Creacion de una Actividad


src/com.rasi.myapplication/MyActivity.java

2
4
6
8
10
12

package com . r a s i . m y a p p l i c a t i o n ;
i m p o r t a n d r o i d . app . A c t i v i t y ;
import a n d r o i d . os . Bundle ;
p u b l i c c l a s s MyActivity extends A c t i v i t y {
/ C a l l e d when t h e a c t i v i t y i s f i r s t c r e a t e d . /
@Override
p u b l i c void onCreate ( Bundle s a v e d I n s t a n c e S t a t e ) {
super . onCreate ( savedInstanceState ) ;
s e t C o n t e n t V i e w (R . l a y o u t . main ) ;
}
}

Para usar una Actividad en una Aplicaci


on, hay que registrarla en el Manifiesto,
incluyendo las Intenciones a las que respondera:
AndroidManifest.xml
1

a n 3:
d r o iCreating
d : l a b e l= @Applications
s t r i n g / app name and Activities
Chapter

<a c t i v i t y

a n d r o i d : n a m e= . M y A c t i v i t y >
<i n t e n t f i l t e r >
to free resources for higher-priority
generally
<a c t i o n applications
a n d r o i d : n a
m e=
a n d r o ithose
d . i n that
t e n tare
. a cinteracting
t i o n . MAIN />
with the user at the time.
The<c
prioritization
discussed
5
a t e g o r y a nprocess
d r o i d : nisa m
e= a n d rin
o i the
d . i next
n t e nsection.
t . c a t e g o r y . LAUNCHER />
</ i n t e n t f i l t e r >
7 </ a c t i v i t y>
3

standing
Application Priority
GSyC - 2009
rocess States

Android: Fundamentos de la Creaci


on de Aplicaciones

15

Creaci
oton reclaim
y destrucci
on de Aplicaciones
y Actividades
in which processes are killed
resources
is determined
by the priority of the hosted
ns. An applications priority is equal to its highest-priority component.

Procesos y prioridades

o applications have the same priority, the process that has been at a lower priority longest
led first. Process priority is also affected by interprocess dependencies; if an application has a
El ordensupplied
en que los
se van matando
para liberar
recursos lo determina las
cy on a Service or Content Provider
by aprocesos
second application,
the secondary
applicahave at least as high a priority
as
the
application
it
supports.
prioridades de la aplicaciones que alojan.

Arbol
de prioridades:

ndroid applications will remain running and in memory until the system needs its resources for
applications.

Prioridad Crtica:

Procesos activos: Los que estan interactuando con el


3 shows the priority tree used to determine the order of application termination.

1. Active Process

2. Visible Process

Critical Priority

High Priority

3. Started Service Process

4. Background Process

5. Empty Process

Figure 3-3

Low Priority

usuario). Hay muy pocos y se les mata solo como u


ltimo
recurso.

Prioridad Alta:
Procesos visibles: Visibles, pero no activos (p.ej,
parcialmente tapados por otra actividad). Hay muy pocos
y se les mata solo en circunstancias extremas.
Procesos de servicios arrancados: Procesamiento que
debe continuar aunque no tenga interfaz visible. Se les
mata solo en circunstancias extremas.

Prioridad Baja:
Procesos de fondo: Alojan actividades que no caen en
las categoras anteriores. Hay muchos. Se les mata
cuando se necesitan recursos para el resto de procesos.
Procesos vacos: Android mantiene en memoria las
aplicaciones que han terminado, por si son relanzadas. Se
les mata rutinariamente.

tant to structure your application correctly to ensure that its priority is appropriate for the
doing. If you dont, your application could be killed while its in the middle of something
t.
GSyC - 2009
Android: Fundamentos de la Creaci
on de Aplicaciones

wing list details each of the application states shown in Figure 3-3, explaining how the state is
ed by the application components comprising it:

16

Creaci
on y destrucci
on de Aplicaciones y Actividades

Estados de una Actividad (I)

I T S A LIVE !

37

Figure 2.3: Life cycle of an Android activity


GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

17

Creaci
on y destrucci
on de Aplicaciones y Actividades

Life Cycles of the Rich and Famous

its lifetime,
each activity(II)
of an Android program can be in one of
During
Estados de
una
Actividad

several states, as shown in Figure 2.3. You, the developer, do not have
control over what state your program is in. Thats all managed by the
system.
However, youLa
do get
notified when
the
state is about
Activo
(Running):
Actividad
est
a encima
de to
la change
pila, es
through the onXX () method calls.

visible, tiene el foco (recibe la entrada del usuario). Cuando


You override these methods in your Activity class, and Android will call
otrathem
Actividad
pase a estar activa, esta pasara a estar pausada.
at the appropriate time:
Pausado
(Paused):: La
esthe
visible
no tiene
onCreate(Bundle)
ThisActividad
is called when
activitypero
first starts
up. el
Youalcanza
can use iteste
to perform
one-time
initialization
as creating
foco. Se
estado
cuando
pasa asuch
activa
otra
the user interface. onCreate( ) takes one parameter that is either
Actividad
transparente
o que no
ocupasaved
todaby la
null or
some state information
previously
thepantalla.
onSaveInstanceState
(
)
method.
Cuando una Actividad es tapada por completo pasa a estar
onStart( ): This indicates the activity is about to be displayed to the
parada.
Parado (Stopped): Cuando la Actividad no es visible.
Permanece en memoria reteniendo su estado. Cuando una
actividad entra en parada puede ser bueno que salve todos sus
datos y el estado de la Interfaz de usuario.
Destruido (Destroyed): Cuando la Actividad termina, o es
matada por el runtime de Android. Sale de la Pila de
Actividades. Necesita ser reiniciada para volver a estar activa.
GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

18

Creaci
on y destrucci
on de Aplicaciones y Actividades

Estados de una Actividad (III)


En la clase Activity existen metodos para ser redefinidos
(overrided) en sus clases derivadas para incluir el codigo a
ejecutar en las transiciones entre estados:
OnCreate, onStart, onPause, onStop. . . .
Los metodos redefinidos siempre deben llamar al metodo de la
superclase:
1
3
5

// C a l l e d a t t h e s t a r t o f t h e v i s i b l e l i f e t i m e .
@Override
p u b l i c void onStart (){
super . onStart ( ) ;
// A p p l y any r e q u i r e d UI c h a n g e now t h a t t h e A c t i v i t y
}

GSyC - 2009

is

visible .

Android: Fundamentos de la Creaci


on de Aplicaciones

19

Creaci
on y destrucci
on de Aplicaciones y Actividades

Metodos de transicion entre estados (I)

onCreate(Bundle):
Se invoca cuando la Actividad se arranca por primera vez.
Se utiliza para tareas de inicializacion a realizar una sola vez,
como crear la interfaz de usuario de la Actividad.
Su parametro es null o informacion de estado guardada
previamente por onSaveInstanceState().

onStart():
Se invoca cuando la Actividad va a ser mostrada al usuario.

onResume():
Se invoca cuando la Actividad va a empezar a interactuar con
el usuario.

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

20

Creaci
on y destrucci
on de Aplicaciones y Actividades

Metodos de transicion entre estados (II)


onPause():
Se invoca cuando la actividad va a pasar al fondo porque otra
actividad ha sido lanzada para ponerse delante.
Se utiliza para guardar el estado persistente de la Actividad

onStop():
Se invoca cuando la actividad va a dejar de ser visible y no se
necesitara durante un tiempo.
Si hay escasez de recursos en el sistema, este metodo podra no
llegar a ser invocado y la Actividad ser destruida directamente.

onRestart():
Se invoca cuando la Actividad va a salir del estado de parada
para volver a estar activa.

onDestroy():
Se invoca cuando la Actividad va a ser destruida.
Si hay escasez de recursos en el sistema, este metodo podra no
llegar a ser invocado y la Actividad ser destruida directamente.
GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

21

Creaci
on y destrucci
on de Aplicaciones y Actividades

Metodos de transicion entre estados (III)

onSaveInstanceState(Bundle):
Se invoca para permitir a la actividad guardar su estado, p.ej:
la posicion del cursor en una caja de texto.
Normalmente no necesita ser redefinido porque la
implementaci
on de la clase Activity ya guarda todo el estado
de todos los componentes de la Interfaz de Usuario.

onRestoreInstanceState(Bundle):
Se invoca para recuperar el estado guardado por
onSaveInstanceState().
Normalmente no necesita ser redefinido porque la
implementaci
on de la clase Activity ya recupera todo el
estado de todos los componentes de la Interfaz de Usuario.

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

22

Recursos de las Aplicaciones Android

Contenidos
1

El Manifiesto de una Aplicaci


on Android

Creaci
on y destrucci
on de Aplicaciones y Actividades

Recursos de las Aplicaciones Android

Creaci
on de Interfaces de Usuario: Views

Creaci
on de Interfaces de Usuario: Layouts

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creaci
on de Interfaces de Usuario: Creaci
on de Controles Compuestos

Creaci
on de Interfaces de Usuario: Men
us

Bibliografa

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

23

Recursos de las Aplicaciones Android

Tipos de recursos

Hay distintos tipos de recursos, que se definen en ficheros


XML alojados en una cierta subcarpeta de res:
Valores simples (carpeta values): Strings, colores y
dimensiones.
Recursos dibujables (carpeta drawable): ficheros con
imagenes, incluyendo el icono de la aplicacion
Animaciones (carpeta anim)
Men
us (carpeta menu)
Dise
nos (carpeta layout)
Estilos (carpeta values)
Varios (carpeta xml)

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

24

Recursos de las Aplicaciones Android

Valores simples
Definen Strings, colores o dimensiones
Se definen como un elemento:
<c o l o r name= o p a q u e r e d >#f 0 0</ c o l o r>

Las dimensiones pueden tener distintas unidades:


px, in, mm, pt, dp, sp
dp: Density-independent pixels (tambien dip), pixels independientes de
los dpi (puntos por pulgada) del dispositivo. Son un valor relativo a un
dispositivo de 160dpi.
sp: Scale-independent pixels, igual que los dp, pero tambien escalados
al tama
no de font elegido por el usuario.
1

<dimen name= s i x t e e n s p >16 s p</ dimen>

Un fichero XML contiene la definicion de uno o mas de estos


elementos.
Todos estos recursos se identifican con el valor de su atributo name.
GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

25

Recursos de las Aplicaciones Android

Drawables

Para ficheros de bitmaps o de imagenes estirables (.9.png)


Tambien puede definirse uno de estos recursos como un
recuadro de color:
1

<d r a w a b l e name= s o l i d b l u e >#0000 f f</ d r a w a b l e>

(un fichero XML puede contener uno o mas recuadros de


color)
Los ficheros se identifican con su nombre de fichero, y los
recuadros de color con el valor de su atributo name.

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

26

Recursos de las Aplicaciones Android

Animaciones

Para realizar animaciones sencillas sobre uno o varios graficos:


rotaciones, fading, movimiento y estiramiento.
Cada animaci
on se define en un fichero XML
Estos recursos se identifican con su nombre de fichero.

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

27

Recursos de las Aplicaciones Android

Menus

Existen tres tipos de men


us: Men
u de opciones,
men
u contextual y submen
u
Un men
u de opciones o contextual se define en un fichero
XML.
Un submen
u se define dentro de otro men
u.
Un men
u de opciones o contextual se identifica con su nombre
de fichero.
Un submen
u se identifica con el valor de su atributo id.
Un elemento de un men
u tambien puede ser identificado con
el valor de su atributo id.

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

28

Recursos de las Aplicaciones Android

Layouts

Un layout se define en un fichero XML.


Dentro de un layout se definen los elementos que lo
componen: Views, ViewGroups
Un layout se identifica con su nombre de fichero.
Un elemento de un layout tambien puede ser identificado con
el valor de su atributo id.

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

29

Recursos de las Aplicaciones Android

Estilos

Un estilo es uno o mas atributos que se aplican a un elemento.


Un tema es uno o mas atributos que se aplican a todo lo que
hay en pantalla. Un tema se asigna como atributo a una
Actividad en su Manifiesto.
Se definen dentro en un elemento <style> que contiene
strings, colores, o referencias a otros recursos.
Un estilo entero se referencia con el valor de su atributo name.
Un elemento dentro de un estilo tambien puede ser
referenciado de la manera adecuada seg
un el tipo de recurso.

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

30

Recursos de las Aplicaciones Android

Recursos para diferentes idiomas y diferente hardware


Pueden especificarse recursos alternativos para diferentes
idiomas o diferente hardware con subcarpetas con el mismo
nombre que la original mas un sufijo o conjunto de sufijos.
Ejemplos:
Valores simples para idioma espa
nol: values-es
Layouts para terminal girado: layout-land
Layouts para teclado sobreimpresionado:
layout-keysexposed

Pueden ponerse varios sufijos encadenados


Dentro de esas subcarpetas se colocaran ficheros
especializados con el mismo nombre que el que tienen en la
carpeta basica (ej: strings.xml)
La aplicaci
on al usar un recurso elegira de entre los
disponibles aquel en el encajen mas sufijos.
GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

31

Recursos de las Aplicaciones Android

Cambios de configuracion en tiempo de ejecucion


Una aplicaci
on puede responder a ciertos cambios de configuraci
on
mientras se ejecuta.
Si lo hace, debe especificarse en el Manifiesto de la aplicaci
on:
1
3

<a c t i v i t y a n d r o i d : n a m e= . T o d o L i s t
a n d r o i d : l a b e l= @ s t r i n g / app name
a n d r o i d : t h e m e= @ s t y l e /TodoTheme
a n d r o i d : c o n f i g C h a n g e s= o r i e n t a t i o n | k e y b o a r d H i d d e n />

Cuando se produzca el cambio se invocara el metodo


onConfigurationChanged en la Actividad:
2
4
6
8
10

@Override
p u b l i c void onConfigurationChanged ( C o n f i gu r a t i o n newConfig ) {
super . onConfigurationChanged ( newConfig ) ;
[ . . . Update any UI b a s e d on r e s o u r c e v a l u e s . . . ]
i f ( n e w C o n f i g . o r i e n t a t i o n == C o n f i g u r a t i o n . ORIENTATION LANDSCAPE ) {
[ . . . React to d i f f e r e n t o r i e n t a t i o n . . . ]
}
i f ( n e w C o n f i g . k e y b o a r d H i d d e n == C o n f i g u r a t i o n . KEYBOARDHIDDEN NO) {
[ . . . React to changed keyboard v i s i b i l i t y . . . ]
}
}

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

32

Recursos de las Aplicaciones Android

Utilizacion de recursos en el codigo (I)


Se accede a los recursos de una aplicacion a traves de la clase estatica R,
regenerada a partir de los ficheros XML cada vez que se recompila el
proyecto.
La clase R incluye subclases estaticas para cada uno de los tipos de
recursos para los que se ha definido al menos un recurso. Ej: R.string,
R.drawable
Cada subclase expone sus recursos asociados como variables, con nombre
igual a los identificadores de los recursos. Ej: R.string.app_name,
R.drawable.icon
El valor de estas variables es una referencia al recurso, no una instancia
del recurso.
Cuando un constructor o un metodo (como setContentView) acepta
como parametro un identificador de recurso, se le puede pasar una de
estas variables:
1
3
5

// I n f l a t e a l a y o u t r e s o u r c e .
s e t C o n t e n t V i e w (R . l a y o u t . main ) ;
// D i s p l a y a t r a n s i e n t d i a l o g box t h a t d i s p l a y s t h e
// e r r o r m e s s a g e s t r i n g r e s o u r c e .
T o a s t . makeText ( t h i s , R . s t r i n g . a p p e r r o r , T o a s t . LENGTH LONG ) . show ( ) ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

33

Recursos de las Aplicaciones Android

Utilizacion de recursos en el codigo (II)


La tabla de recursos de una aplicacion esta representada por
una instancia de la clase Resources.
Cuando se necesita una instancia del recurso se usan metodos
helper para extraerlos de la tabla de recursos.
La clase Resources incluye getters para cada tipo de recursos
disponible, a los que se pasa la variable (referencia) del
recurso del que se quiere una instancia:
1
3

Resources myResources = g e t R e s o u r c e s ( ) ;
C h a r S e q u e n c e s t y l e d T e x t = m y R e s o u r c e s . g e t T e x t (R . s t r i n g . s t o p m e s s a g e ) ;
D r a w a b l e i c o n = m y R e s o u r c e s . g e t D r a w a b l e (R . d r a w a b l e . a p p i c o n ) ;

i n t o p a q u e B l u e = m y R e s o u r c e s . g e t C o l o r (R . c o l o r . o p a q u e b l u e ) ;

f l o a t b o r d e r W i d t h = m y R e s o u r c e s . g e t D i m e n s i o n (R . dimen . s t a n d a r d b o r d e r ) ;

Animation tranOut ;
t r a n O u t = A n i m a t i o n U t i l s . l o a d A n i m a t i o n ( t h i s , R . anim . s p i n s h r i n k f a d e ) ;

11
13

String [ ] stringArray ;
s t r i n g A r r a y = m y R e s o u r c e s . g e t S t r i n g A r r a y (R . a r r a y . s t r i n g a r r a y ) ;

15

int []

GSyC - 2009

i n t A r r a y = m y R e s o u r c e s . g e t I n t A r r a y (R . a r r a y . i n t e g e r a r r a y ) ;
Android: Fundamentos de la Creaci
on de Aplicaciones

34

Recursos de las Aplicaciones Android

Referenciacion de Recursos en otros Recursos


Para referenciar un recurso en otro recurso se utiliza la notaci
on
@:
1

a t r i b u t o=@ [ n o m b r e p a q u e t e : ] t i p o r e c u r s o / i d r e c u r s o

(el nombre de paquete puede omitirse si es del mismo paquete)


Ejemplo:
1
3
5
7
9
11
13
15

<? xml v e r s i o n= 1 . 0 e n c o d i n g= u t f 8 ?>


<L i n e a r L a y o u t
x m l n s : a n d r o i d= h t t p : // sch emas . a n d r o i d . com/ apk / r e s / a n d r o i d
a n d r o i d : o r i e n t a t i o n= v e r t i c a l
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= f i l l p a r e n t
a n d r o i d : p a d d i n g= @dimen / s t a n d a r d b o r d e r >
<E d i t T e x t
a n d r o i d : i d=@+i d / m y E d i t T e x t
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= w r a p c o n t e n t
a n d r o i d : t e x t= @ s t r i n g / s t o p m e s s a g e
a n d r o i d : t e x t C o l o r= @ c o l o r / o p a q u e b l u e
/>
</ L i n e a r L a y o u t>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

35

Recursos de las Aplicaciones Android

Referenciacion de Recursos del Sistema


Las aplicaciones nativas de Android externalizan muchos de sus
recursos para que sean accesibles desde otras aplicaciones.
Para acceder a ellos en el codigo Java se utiliza android.R en vez de
R:
1

CharSequence h t t p E r r o r = g e t S t r i n g ( a n d r o i d . R . s t r i n g . h t t p E r r o r B a d U r l ) ;

Para acceder desde otros recursos, se utiliza Android como nombre


de paquete:
1
3
5
7

<E d i t T e x t
a n d r o i d : i d=@+i d / m y E d i t T e x t
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= w r a p c o n t e n t
a n d r o i d : t e x t= @ a n d r o i d : s t r i n g / h t t p E r r o r B a d U r l
a n d r o i d : t e x t C o l o r= @ a n d r o i d : c o l o r / d a r k e r g r a y
/>

Tambien es posible acceder a recursos del tema actual (para


mantener consistencia con el resto de aplicaciones), con ?:
1

a n d r o i d : t e x t C o l o r =? a n d r o i d : t e x t C o l o r

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

36

Creaci
on de Interfaces de Usuario: Views

Contenidos
1

El Manifiesto de una Aplicaci


on Android

Creaci
on y destrucci
on de Aplicaciones y Actividades

Recursos de las Aplicaciones Android

Creaci
on de Interfaces de Usuario: Views

Creaci
on de Interfaces de Usuario: Layouts

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creaci
on de Interfaces de Usuario: Creaci
on de Controles Compuestos

Creaci
on de Interfaces de Usuario: Men
us

Bibliografa

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

37

Creaci
on de Interfaces de Usuario: Views

Terminologa

Vistas (Views): Clase basica que representa a un elemento


basico de IU en Android. En otros tipo de aplicaciones se
utiliza el nombre de controles o widgets.
Todos los componentes visuales en Android descienden de la
clase View.
Grupos de Vistas (ViewGroups): Extensiones de la clase View
para crear controles compuestos que contienen m
ultiples
Views hijas.
Dise
nos (Layouts): Extensiones de la clase ViewGroup para
gestionar la disposici
on de sus Views hijas.

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

38

Creaci
on de Interfaces de Usuario: Views

Creacion de la IU de una Actividad con Views

La forma habitual es establecer el Layout al principio del


metodo onCreate.
Una vez establecido, pueden obtenerse referencias a las Views
contenidas en el Layout llamando al metodo findViewById:
1
3

@Override
p u b l i c void onCreate ( Bundle s a v e d I n s t a n c e S t a t e ) {
super . onCreate ( savedInstanceState ) ;

s e t C o n t e n t V i e w (R . l a y o u t . main ) ;

TextView myTextView = ( TextView ) f i n d V i e w B y I d (R . i d . myTextView ) ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

39

Creaci
on de Interfaces de Usuario: Views

Views estandar habituales


TextView: Etiqueta de texto de solo lectura.
EditText: Caja de texto editable, que acepta entradas
multilnea.
ListView: ViewGroup que gestiona un grupo de Views para
mostrarlo en forma de lista, usando por defecto un TextView
para cada elemento.
Spinner: Control compuesto que muestra un TextView con
una ListView asociada para elegir uno de sus elementos para
ser mostrado en el TextView.
Button: Bot
on pulsable estandar.
Checkbox: Bot
on de dos estados representado por un caja
marcada o desmarcada.
RadioButton: Varios botones de dos estados, agrupados de
forma que s
olo uno del grupo puede estar activado.
GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

40

Creaci
on de Interfaces de Usuario: Layouts

Contenidos
1

El Manifiesto de una Aplicaci


on Android

Creaci
on y destrucci
on de Aplicaciones y Actividades

Recursos de las Aplicaciones Android

Creaci
on de Interfaces de Usuario: Views

Creaci
on de Interfaces de Usuario: Layouts

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creaci
on de Interfaces de Usuario: Creaci
on de Controles Compuestos

Creaci
on de Interfaces de Usuario: Men
us

Bibliografa

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

41

Creaci
on de Interfaces de Usuario: Layouts

Layouts estandar habituales

FrameLayout: Coloca cada View en la esquina izquierda.


Cada nueva View que se a
nade tapa a la anterior.
LinearLayout: Coloca cada View hija en lnea, de forma
horizontal (una fila de Views) o vertical (una columna de
Views).
TableLayout: Coloca las Views en forma de tabla
RelativeLayout: Las posiciones de cada View hija es relativa
a las otras y a los bordes de la pantalla
AbsoluteLayout: Las posiciones de cada View hija se define
en coordenadas absolutas

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

42

Creaci
on de Interfaces de Usuario: Layouts

Ejemplo:

1
3
5
7
9
11
13
15

<? xml v e r s i o n= 1 . 0 e n c o d i n g= u t f 8 ?>


<L i n e a r L a y o u t x m l n s : a n d r o i d= h t t p : // s c h em a s . a n d r o i d . com/ apk / r e s / a n d r o i d
a n d r o i d : o r i e n t a t i o n= v e r t i c a l
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= f i l l p a r e n t >
<TextView
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= w r a p c o n t e n t
a n d r o i d : t e x t= E n t e r Text Below
/>
<E d i t T e x t
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= w r a p c o n t e n t
a n d r o i d : t e x t= Text Goes Here !
/>
</ L i n e a r L a y o u t>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

43

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Contenidos
1

El Manifiesto de una Aplicaci


on Android

Creaci
on y destrucci
on de Aplicaciones y Actividades

Recursos de las Aplicaciones Android

Creaci
on de Interfaces de Usuario: Views

Creaci
on de Interfaces de Usuario: Layouts

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creaci
on de Interfaces de Usuario: Creaci
on de Controles Compuestos

Creaci
on de Interfaces de Usuario: Men
us

Bibliografa

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

44

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creacion de nuevas Views a partir de las existentes


Se extiende una View ya existente, redefiniendo los metodos que definen su
apariencia y su comportamiento:
MyTextView.java

2
4

p u b l i c c l a s s MyTextView e x t e n d s TextView {
p u b l i c MyTextView ( C o n t e x t c o n t e x t , A t t r i b u t e S e t a t s , i n t d e f S t y l e ) {
super ( context , ats , d e f S t y l e ) ;
}

p u b l i c MyTextView ( C o n t e x t c o n t e x t ) {
super ( context ) ;

10

p u b l i c MyTextView ( C o n t e x t c o n t e x t , A t t r i b u t e S e t a t t r s ) {
super ( context , a t t r s ) ;

12

14

@Override
p u b l i c v o i d onDraw ( Canvas c a n v a s ) {
[ . . . Draw t h i n g s on t h e c a n v a s u n d e r t h e t e x t

16
18

...

// R e n d e r t h e t e x t a s u s u a l u s i n g t h e TextView b a s e c l a s s .
s u p e r . onDraw ( c a n v a s ) ;

20

. . . Draw t h i n g s on t h e c a n v a s o v e r t h e t e x t

...

22

24

@Override
p u b l i c b o o l e a n onKeyDown ( i n t keyCode , KeyEvent k e y E v e n t ) {
[ . . . P e r f o r m some s p e c i a l p r o c e s s i n g . . . ]
[ . . . b a s e d on a p a r t i c u l a r k e y p r e s s . . . ]

26
28
30
32

// Use t h e e x i s t i n g f u n c t i o n a l i t y i m p l e m e n t e d by
// t h e b a s e c l a s s t o r e s p o n d t o a k e y p r e s s e v e n t .
r e t u r n s u p e r . onKeyDown ( keyCode , k e y E v e n t ) ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

45

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Mejora del aspecto de la TodoList (I)


Creamos una nueva TodoListItemView extendiendo TextView:
src/com.rasi.todolist/TodoListItemView.java
1
3
5
7
9
11
13

package com . r a s i . t o d o l i s t ;
import android . content . Context ;
import android . content . r e s . Resources ;
i m p o r t a n d r o i d . g r a p h i c s . Canvas ;
import android . g r a p h i c s . Paint ;
import android . u t i l . A t t r i b u t e S e t ;
i m p o r t a n d r o i d . w i d g e t . TextView ;
p u b l i c c l a s s T o d o L i s t I t e m V i e w e x t e n d s TextView {
p u b l i c TodoListItemView ( Context context , A t t r i b u t e S e t ats , i n t ds ) {
super ( context , ats , ds ) ;
init ();
}

15

p u b l i c TodoListItemView ( Context context ) {


super ( context ) ;
init ();
}

17
19

p u b l i c TodoListItemView ( Context context , A t t r i b u t e S e t a t t r s ) {


super ( context , a t t r s ) ;
init ();
}
private void i n i t () {
}

21
23
25
27
29
31

@Override
p u b l i c v o i d onDraw ( Canvas c a n v a s ) {
// Use t h e b a s e TextView t o r e n d e r t h e t e x t .
s u p e r . onDraw ( c a n v a s ) ;
}

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

46

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Mejora del aspecto de la TodoList (II)


Creamos un nuevo colors.xml en res/values:
res/values/colors.xml

2
4
6

<? xml v e r s i o n= 1 . 0 e n c o d i n g= u t f 8 ?>


<r e s o u r c e s>
<c o l o r name= n o t e p a d p a p e r >#AAFFFF99</ c o l o r>
<c o l o r name= n o t e p a d l i n e s >#FF0000FF</ c o l o r>
<c o l o r name= n o t e p a d m a r g i n >#90FF0000</ c o l o r>
<c o l o r name= n o t e p a d t e x t >#AA0000FF</ c o l o r>
</ r e s o u r c e s>

Creamos un nuevo dimens.xml en res/values:


res/values/dimens.xml
1
3

<? xml v e r s i o n= 1 . 0 e n c o d i n g= u t f 8 ?>


<r e s o u r c e s>
<dimen name= n o t e p a d m a r g i n >30 px</ dimen>
</ r e s o u r c e s>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

47

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Mejora del aspecto de la TodoList (III)


Ahora podemos incluir el metodo init en
TodoListItemView:
src/com.rasi.todolist/TodoListItemView.java (fragmento)

2
4
6
8

private
private
private
private

private void i n i t () {
// Get a r e f e r e n c e t o o u r r e s o u r c e t a b l e .
Resources myResources = g e t R e s o u r c e s ( ) ;

10

// C r e a t e t h e p a i n t b r u s h e s we w i l l u s e i n t h e onDraw method .
m a r g i n P a i n t = new P a i n t ( P a i n t . ANTI ALIAS FLAG ) ;
m a r g i n P a i n t . s e t C o l o r ( m y R e s o u r c e s . g e t C o l o r (R . c o l o r . n o t e p a d m a r g i n ) ) ;
l i n e P a i n t = new P a i n t ( P a i n t . ANTI ALIAS FLAG ) ;
l i n e P a i n t . s e t C o l o r ( m y R e s o u r c e s . g e t C o l o r (R . c o l o r . n o t e p a d l i n e s ) ) ;

12
14
16
18

Paint marginPaint ;
Paint l i n e P a i n t ;
int paperColor ;
f l o a t margin ;

// Get t h e p a p e r b a c k g r o u n d c o l o r and t h e m a r g i n w i d t h .
p a p e r C o l o r = m y R e s o u r c e s . g e t C o l o r (R . c o l o r . n o t e p a d p a p e r ) ;
m a r g i n = m y R e s o u r c e s . g e t D i m e n s i o n (R . dimen . n o t e p a d m a r g i n ) ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

48

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Mejora del aspecto de la TodoList (IV)


Refinamos el metodo onDraw utilizando las variables de
instancia inicialidadas en init:
src/com.rasi.todolist/TodoListItemView.java (fragmento)
1
3
5

@Override
p u b l i c v o i d onDraw ( Canvas c a n v a s ) {
// C o l o r a s p a p e r
canvas . drawColor ( paperColor ) ;
// Draw r u l e d l i n e s
canvas . drawLine (0 , 0 , getMeasuredHeight ( ) , 0 , l i n e P a i n t ) ;
canvas . drawLine (0 , getMeasuredHeight () ,
getMeasuredWidth ( ) , getMeasuredHeight ( ) ,
linePaint );

7
9
11

// Draw m a r g i n
c a n v a s . d r a w L i n e ( margin , 0 , margin , g e t M e a s u r e d H e i g h t ( ) , m a r g i n P a i n t ) ;

13
15

// Move t h e t e x t a c r o s s from t h e m a r g i n
canvas . save ( ) ;
c a n v a s . t r a n s l a t e ( margin , 0 ) ;

17
19
21

// Use t h e b a s e TextView t o r e n d e r t h e t e x t .
s u p e r . onDraw ( c a n v a s ) ;
canvas . r e s t o r e ( ) ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

49

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Mejora del aspecto de la TodoList (V)

Creamos un nuevo Layout para especificar como se


dispondran los elementos de la lista usando la nueva View:
res/layout/todolist item.xml

2
4
6
8
10

<? xml v e r s i o n= 1 . 0 e n c o d i n g= u t f 8 ?>


<com . r a s i . t o d o l i s t . T o d o L i s t I t e m V i e w
x m l n s : a n d r o i d= h t t p : // sch em as . a n d r o i d . com/ apk / r e s / a n d r o i d
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= f i l l p a r e n t
a n d r o i d : p a d d i n g= 10 dp
a n d r o i d : s c r o l l b a r s = v e r t i c a l
a n d r o i d : t e x t C o l o r= @ c o l o r / n o t e p a d t e x t
a n d r o i d : f a d i n g E d g e= v e r t i c a l
/>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

50

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Mejora del aspecto de la TodoList (VI)


Ahora en el onCreate de ToDoList.java reemplazamos los
parametros pasados al ArrayAdapter para hacer uso del
nuevo Layout.
ANTES:
src/com.rasi.todolist/TodoListItemView.java (fragmento)
f i n a l A r r a y L i s t <S t r i n g > t o d o I t e m s = new A r r a y L i s t <S t r i n g >();
f i n a l A r r a y A d a p t e r<S t r i n g > aa ;
aa = new A r r a y A d a p t e r<S t r i n g >( t h i s ,
android .R. layout . s i m p l e l i s t i t e m 1 , todoItems ) ;
m y L i s t V i e w . s e t A d a p t e r ( aa ) ;

2
4

AHORA:
src/com.rasi.todolist/TodoListItemView.java (fragmento)
1

f i n a l A r r a y L i s t <S t r i n g > t o d o I t e m s = new A r r a y L i s t <S t r i n g >();


int resID = R. layout . to d o l i s t i t e m ;
f i n a l A r r a y A d a p t e r<S t r i n g > aa ;
aa = new A r r a y A d a p t e r<S t r i n g >( t h i s , r e s I D , t o d o I t e m s ) ;
m y L i s t V i e w . s e t A d a p t e r ( aa ) ;

3
5

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

51

Creaci
on de IU: Creaci
on de Controles Compuestos

Contenidos
1

El Manifiesto de una Aplicaci


on Android

Creaci
on y destrucci
on de Aplicaciones y Actividades

Recursos de las Aplicaciones Android

Creaci
on de Interfaces de Usuario: Views

Creaci
on de Interfaces de Usuario: Layouts

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creaci
on de Interfaces de Usuario: Creaci
on de Controles Compuestos

Creaci
on de Interfaces de Usuario: Men
us

Bibliografa

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

52

Creaci
on de IU: Creaci
on de Controles Compuestos

Creacion de controles compuestos (I)


Un Control Compuesto es aquel formado por m
ultiples Views
que trabajan juntos.
Al crearlo se define su disposicion, apariencia y la interacion
entre sus Views.
Se crean extendiendo un ViewGroup (o mas bien un Layout):
MyCompoundView.java
1
3
5
7

p u b l i c c l a s s MyCompoundView e x t e n d s L i n e a r L a y o u t {
p u b l i c MyCompoundView ( C o n t e x t c o n t e x t ) {
super ( context ) ;
}
p u b l i c MyCompoundView ( C o n t e x t c o n t e x t , A t t r i b u t e S e t a t t r s ) {
super ( context , a t t r s ) ;
}
}

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

53

Creaci
on de IU: Creaci
on de Controles Compuestos

Creacion de controles compuestos (II)


Para dise
nar su interfaz de usuario se utiliza un Layout:
clearable edit text.xml

2
4
6
8
10
12
14
16

<? xml v e r s i o n= 1 . 0 e n c o d i n g= u t f 8 ?>


<L i n e a r L a y o u t x m l n s : a n d r o i d= h t t p : // s c h e m a s . a n d r o i d . com/ apk / r e s / a n d r o i d
a n d r o i d : o r i e n t a t i o n= v e r t i c a l
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= f i l l p a r e n t >
<E d i t T e x t
a n d r o i d : i d=@+i d / e d i t T e x t
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= w r a p c o n t e n t
/>
<B u t t o n
a n d r o i d : i d=@+i d / c l e a r B u t t o n
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= w r a p c o n t e n t
a n d r o i d : t e x t= C l e a r
/>
</ L i n e a r L a y o u t>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

54

Creaci
on de IU: Creaci
on de Controles Compuestos

Creacion de controles compuestos (III)


Para asignar el Layout al nuevo control compuesto hay que
redefinir su constructor:
MyCompoundView.java (fragmento)
1
3
5

EditText editText ;
Button c l e a r B u t t o n ;
p u b l i c C l e a r a b l e E d i t T e x t ( Context context ) {
super ( context ) ;

// I n f l a t e t h e v i e w from t h e l a y o u t r e s o u r c e .
S t r i n g i n f S e r v i c e = C o n t e x t . LAYOUT INFLATER SERVICE ;
LayoutInflater l i ;
l i = ( L a y o u t I n f l a t e r ) getContext ( ) . getSystemService ( i n f S e r v i c e ) ;
l i . i n f l a t e (R . l a y o u t . c l e a r a b l e e d i t t e x t , t h i s , t r u e ) ;

9
11
13

// Get r e f e r e n c e s t o t h e c h i l d c o n t r o l s .
e d i t T e x t = ( E d i t T e x t ) f i n d V i e w B y I d (R . i d . e d i t T e x t ) ;
c l e a r B u t t o n = ( B u t t o n ) f i n d V i e w B y I d (R . i d . c l e a r B u t t o n ) ;

15
17
19

// Hook up t h e f u n c t i o n a l i t y
hookupButton ( ) ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

55

Creaci
on de Interfaces de Usuario: Men
us

Contenidos
1

El Manifiesto de una Aplicaci


on Android

Creaci
on y destrucci
on de Aplicaciones y Actividades

Recursos de las Aplicaciones Android

Creaci
on de Interfaces de Usuario: Views

Creaci
on de Interfaces de Usuario: Layouts

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creaci
on de Interfaces de Usuario: Creaci
on de Controles Compuestos

Creaci
on de Interfaces de Usuario: Men
us

Bibliografa

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

56

Creaci
on de Interfaces de Usuario: Men
us

Tipos de Menu
Men
u de Opciones: El que aparece cuando se pulsa el boton
Men
u o M del terminal. Consta de un men
u de iconos y,
en su caso, de un men
u expandido:
Men
u de Iconos: Hasta 6 elementos con un icono y/o texto.
En cada elemento puede ir un submen
u. Si se definen mas de 6
elementos, aparece un elemento llamado Mas que
mostrara el men
u expandido.
Men
u Expandido: Lista desplazable de los elementos del
men
u de opciones que no entraban dentro del men
u de iconos.

Men
u Contextual: Men
u que se despliega al pulsar el boton
central del terminal, o al tocar prolongadamente la pantalla
tactil.
Submen
u: Men
u flotante que se despliega al seleccionar una
entrada definida como submen
u en alguno de los men
us
anteriores. Dentro de un submen
u NO puede haber otro.
GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

57

Creaci
on de Interfaces de Usuario: Men
us

Creacion de un Menu de Opciones para una Actividad


Hay que redefinir el metodo OnCreateOptionsMenu, que se invocara la primera vez que se muestre el
men
u de opciones de la Actividad.
En la implementacion redefinida es necesario llamar al metodo de la clase Activity.
Para a
nadir entradas al men
u se utiliza el metodo add de la clase Menu, que requiere los siguientes
parametros:
un identificador de grupo para poder agrupar entradas
un identificador de la entrada, que permitira saber que entrada se ha pulsado cuando se invoque el manejador
onOptionsItemSelected. Cada identificador de una entrada debera declararse como atributo de clase de la
Actividad.
un n
umero de orden para la colocaci
on de la entrada en el men
u
el texto de la entrada

2
4
6

static

p r i v a t e i n t MENU ITEM = Menu . FIRST ;

@Override
p u b l i c b o o l e a n o n C r e a t e O p t i o n s M e n u ( Menu menu ) {
s u p e r . o n C r e a t e O p t i o n s M e n u ( menu ) ;
// Group ID
int groupId = 0;
// U n i q u e menu i t e m i d e n t i f i e r . Used f o r e v e n t h a n d l i n g .
i n t m e n u I t e m I d = MENU ITEM ;
// The o r d e r p o s i t i o n o f t h e i t e m
i n t menuItemOrder = Menu .NONE;
// Text t o be d i s p l a y e d f o r t h i s menu i t e m .
i n t menuItemText = R . s t r i n g . menu item ;

8
10
12
14
16
18
20

final

// C r e a t e t h e menu i t e m and k e e p a r e f e r e n c e t o i t .
MenuItem menuItem = menu . add ( g r o u p I d , menuItemId ,
menuItemOrder , menuItemText ) ;
return true ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

58

Creaci
on de Interfaces de Usuario: Men
us

Elementos del Menu de Opciones

La clase MenuItem permite a


nadir detalles adicionales a la
entrada:
Checkboxes o Radio Buttons, solo visibles en el
men
u expandido o en un submen
u.
Atajos de teclado
Ttulos abreviados
Iconos (solo visibles en el men
u de iconos)
Manejador a ejecutar cuando se seleccione este elemento (NO
recomendado, es mas eficiente usar onOptionsItemSelected)
Intenciones, que seran activadas cuando se seleccione este
elemento.

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

59

Creaci
on de Interfaces de Usuario: Men
us

Modificacion dinamica del Menu de Opciones

Puede modificarse un men


u cada vez que se muestra
redefiniendo el metodo onPrepareOptionsMenu:

2
4

@Override
p u b l i c b o o l e a n o n P r e p a r e O p t i o n s M e n u ( Menu menu ) {
s u p e r . o n P r e p a r e O p t i o n s M e n u ( menu ) ;
MenuItem menuItem = menu . f i n d I t e m (MENU ITEM ) ;

8
10

...

m o d i f y menu i t e m s

...

return true ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

60

Creaci
on de Interfaces de Usuario: Men
us

Manejar las selecciones del menu


A traves del u
nico manejador onOptionsItemSelected.
El elemento seleccionado se recibe como parametro MenuItem.
Habra que comparar su identificador con los establecidos al
crear el men
u:

p u b l i c b o o l e a n o n O p t i o n s I t e m S e l e c t e d ( MenuItem i t e m ) {
super . onOptionsItemSelected ( item ) ;

// F i n d w h i c h menu i t e m h a s b e e n s e l e c t e d
switch ( item . getItemId ( ) ) {

6
8
10

12
14

// Check f o r e a c h known menu i t e m


c a s e (MENU ITEM ) :
[ . . . P e r f o r m menu h a n d l e r a c t i o n s
return true ;

// R e t u r n f a l s e
return false ;

...

i f you h a v e n o t h a n d l e d t h e menu i t e m .

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

61

Creaci
on de Interfaces de Usuario: Men
us

Creacion de un Submenu

A traves de addSubMenu, que admite los mismos parametros


que add para a
nadir elementos normales.
Los elementos de dentro del submen
u se gestionan igual que
los del men
u de opciones.
Adicionalmente se puede a
nadir un icono para el men
u de
opciones y para la cabecera del submen
u cuando se muestre.

2
4

SubMenu s u b = menu . addSubMenu ( 0 , 0 , Menu . NONE, Submenu ) ;


s u b . s e t H e a d e r I c o n (R . d r a w a b l e . i c o n ) ;
s u b . s e t I c o n (R . d r a w a b l e . i c o n ) ;
MenuItem submenuItem = s u b . add ( 0 , 0 , Menu . NONE, Submenu I t e m ) ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

62

Creaci
on de Interfaces de Usuario: Men
us

Menus Contextuales
Puede crearse un men
u contextual para una Actividad redefiniendo su metodo
onCreateContextMenu y registrando la View que lo usara:
1
3
5

@Override
p u b l i c v o i d o n C r e a t e C o n t e x t M e n u ( ContextMenu menu , View v ,
ContextMenu . C o n t e x t M e n u I n f o m e n u I n f o ) {
s u p e r . o n C r e a t e C o n t e x t M e n u ( menu , v , m e n u I n f o ) ;

7
9
11
13

menu . s e t H e a d e r T i t l e ( C o n t e x t Menu ) ;
menu . add ( 0 , menu . FIRST , Menu . NONE,
I t e m 1 ) . s e t I c o n (R . d r a w a b l e . menu item ) ;
menu . add ( 0 , menu . FIRST+1 , Menu . NONE, I t e m 2 ) . s e t C h e c k a b l e ( t r u e ) ;
menu . add ( 0 , menu . FIRST+2 , Menu . NONE, I t e m 3 ) . s e t S h o r t c u t ( 3 , 3 ) ;
SubMenu s u b = menu . addSubMenu ( Submenu ) ;
s u b . add ( Submenu I t e m ) ;

Las selecciones de un men


u contextual se manejan de forma similar a las del
men
u de opciones, redefiniendo el metodo onContextItemSelected de la
Actividad:
1
3

@Override
p u b l i c b o o l e a n o n C o n t e x t I t e m S e l e c t e d ( MenuItem i t e m ) {
super . onContextItemSelected ( item ) ;

return false ;

...

H a n d l e menu i t e m s e l e c t i o n

...

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

63

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (I)


Creamos dos ficheros .png para iconos del men
u: Uno con un
signo + para a
nadir una nueva tarea (add_new_item.png),
y otro con un aspa para borrar una tarea (remove_item.png).
Copiamos las imagenes a la carpeta res/drawable.
Modificamos el fichero res/values/strings.xml para
definir los textos para los men
us:
res/values/strings.xml

2
4
6

<? xml v e r s i o n= 1 . 0 e n c o d i n g= u t f 8 ?>


<r e s o u r c e s>
<s t r i n g name= app name >To Do L i s t</ s t r i n g>
<s t r i n g name= add new >Add New I t e m</ s t r i n g>
<s t r i n g name= remove >Remove I t e m</ s t r i n g>
<s t r i n g name= c a n c e l >C a n c e l</ s t r i n g>
</ r e s o u r c e s>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

64

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (II)


Creamos un nuevo tema para la aplicacion creando un nuevo
fichero res/values/styles.xml, basado en un tema
estandar de Android y fijando un tama
no del texto:
res/values/styles.xml
1
3
5

<? xml v e r s i o n= 1 . 0 e n c o d i n g= u t f 8 ?>


<r e s o u r c e s>
<s t y l e name=ToDoTheme p a r e n t= @ a n d r o i d : s t y l e /Theme . B l a c k >
<i t e m name= a n d r o i d : t e x t S i z e >12 s p</ i t e m>
</ s t y l e>
</ r e s o u r c e s>

Aplicamos el tema a la Aplicacion en el manifiesto:


AndroidManifest.xml

<a c t i v i t y a n d r o i d : n a m e= . T o D o L i s t
a n d r o i d : l a b e l= @ s t r i n g / app name
a n d r o i d : t h e m e= @ s t y l e /ToDoTheme>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

65

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (III)

A
nadimos constantes para definir los identificadores de los
elementos del men
u:
src/com.rasi.todolist/TodoList.java (fragmento)
1

static
static

GSyC - 2009

final
final

p r i v a t e i n t ADD NEW TODO = Menu . FIRST ;


p r i v a t e i n t REMOVE TODO = Menu . FIRST + 1 ;

Android: Fundamentos de la Creaci


on de Aplicaciones

66

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (IV)


Redefinimos onCreateOptionsMenu para a
nadir los
elementos del men
u de opciones:
src/com.rasi.todolist/TodoList.java (fragmento)

2
4

@Override
p u b l i c b o o l e a n o n C r e a t e O p t i o n s M e n u ( Menu menu ) {
s u p e r . o n C r e a t e O p t i o n s M e n u ( menu ) ;
// C r e a t e and add new menu i t e m s .
MenuItem itemAdd = menu . add ( 0 , ADD NEW TODO, Menu . NONE,
R . s t r i n g . add new ) ;
MenuItem itemRem = menu . add ( 0 , REMOVE TODO, Menu . NONE,
R . s t r i n g . remove ) ;

6
8
10

// A s s i g n i c o n s
itemAdd . s e t I c o n (R . d r a w a b l e . a d d n e w i t e m ) ;
itemRem . s e t I c o n (R . d r a w a b l e . r e m o v e i t e m ) ;

12
14
16
18

// A l l o c a t e s h o r t c u t s t o e a c h o f them .
itemAdd . s e t S h o r t c u t ( 0 , a ) ;
itemRem . s e t S h o r t c u t ( 1 , r ) ;
return true ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

67

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (V)


Para crear un men
u contextual primero modificamos onCreate
para indicar que la ListView tendra dicho men
u:
src/com.rasi.todolist/TodoList.java (fragmento)
1

Override
p u b l i c void onCreate ( Bundle o n S a v e I n s t a n c e S t a t e ) {

5
7

...

e x i s t i n g o n C r e a t e method . . .

registerForContextMenu ( myListView ) ;

Ahora redefinimos onCreateContextMenu:


src/com.rasi.todolist/TodoList.java (fragmento)
1
3
5

@Override
p u b l i c v o i d o n C r e a t e C o n t e x t M e n u ( ContextMenu menu ,
View v ,
ContextMenu . C o n t e x t M e n u I n f o m e n u I n f o ) {
s u p e r . o n C r e a t e C o n t e x t M e n u ( menu , v , m e n u I n f o ) ;

7
9

menu . s e t H e a d e r T i t l e ( S e l e c t e d To Do I t e m ) ;
menu . add ( 0 , REMOVE TODO, Menu . NONE, R . s t r i n g . remove ) ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

68

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (VI)


En el metodo onCreate necesitamos que la lista de items, el
ArrayAdapter y los controles tengan visibilidad en otros
metodos, as que los convertimos en atributos:
src/com.rasi.todolist/TodoList.java (fragmento)
1
3
5
7
9

private
private
private
private

A r r a y L i s t <S t r i n g > t o d o I t e m s ;
ListView myListView ;
EditText myEditText ;
A r r a y A d a p t e r<S t r i n g > aa ;

@Override
p u b l i c void onCreate ( Bundle s a v e d I n s t a n c e S t a t e ) {
super . onCreate ( savedInstanceState ) ;
// I n f l a t e y o u r v i e w
s e t C o n t e n t V i e w (R . l a y o u t . main ) ;

11
13
15

// Get r e f e r e n c e s t o UI w i d g e t s
m y L i s t V i e w = ( L i s t V i e w ) f i n d V i e w B y I d (R . i d . m y L i s t V i e w ) ;
m y E d i t T e x t = ( E d i t T e x t ) f i n d V i e w B y I d (R . i d . m y E d i t T e x t ) ;

17

t o d o I t e m s = new A r r a y L i s t <S t r i n g >();

19

21

...

r e s t o f e x i s t i n g o n C r e a t e method . . .

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

69

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (VII)


Redefinimos onPrepareOptionsMenu para que muestre
Cancel en vez de Delete mientras se esta a
nadiendo una
entrada:
src/com.rasi.todolist/TodoList.java (fragmento)
1

p r i v a t e b o o l e a n addingNew = f a l s e ;

@Override
p u b l i c b o o l e a n o n P r e p a r e O p t i o n s M e n u ( Menu menu ) {
s u p e r . o n P r e p a r e O p t i o n s M e n u ( menu ) ;

5
7

i n t i d x = myListView . g e t S e l e c t e d I t e m P o s i t i o n ( ) ;

S t r i n g r e m o v e T i t l e = g e t S t r i n g ( addingNew ?
R . s t r i n g . c a n c e l : R . s t r i n g . remove ) ;

11

MenuItem r e m o v e I t e m = menu . f i n d I t e m (REMOVE TODO ) ;


removeItem . s e t T i t l e ( r e m o v e T i t l e ) ;
r e m o v e I t e m . s e t V i s i b l e ( addingNew | | i d x > 1);

13
15
17

return true ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

70

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (VIII)


Redefinimos onOptionsItemSelected en funci
on de los metodos
cancelAdd, addNewItem y removeItem que definiremos luego:
src/com.rasi.todolist/TodoList.java (fragmento)
1
3

@Override
p u b l i c b o o l e a n o n O p t i o n s I t e m S e l e c t e d ( MenuItem i t e m ) {
super . onOptionsItemSelected ( item ) ;

i n t index = myListView . g e t S e l e c t e d I t e m P o s i t i o n ( ) ;

switch ( item . getItemId ( ) ) {


c a s e (REMOVE TODO ) : {
i f ( addingNew ) {
cancelAdd ( ) ;
}
else {
removeItem ( i n d e x ) ;
}
return true ;
}
c a s e (ADD NEW TODO ) : {
addNewItem ( ) ;
return true ;
}
}

9
11
13
15
17
19
21
23

return false ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

71

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (IX)


Redefinimos onContextItemSelected:
src/com.rasi.todolist/TodoList.java (fragmento)

2
4
6
8

@Override
p u b l i c b o o l e a n o n C o n t e x t I t e m S e l e c t e d ( MenuItem i t e m ) {
super . onContextItemSelected ( item ) ;
switch ( item . getItemId ( ) ) {
c a s e (REMOVE TODO ) : {
AdapterView . AdapterContextMenuInfo menuInfo ;
m e n u I n f o =( A d a p t e r V i e w . A d a p t e r C o n t e x t M e n u I n f o ) i t e m . g e t M e n u I n f o ( ) ;
i n t i n d e x = menuInfo . p o s i t i o n ;

10

removeItem ( i n d e x ) ;
return true ;

12
14
16

}
}
return false ;

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

72

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (X)


Definimos los metodos de apoyo cancelAdd, addNewItem y
removeItem:
src/com.rasi.todolist/TodoList.java (fragmento)
1
3
5
7
9
11
13
15

p r i v a t e void cancelAdd () {
addingNew = f a l s e ;
m y E d i t T e x t . s e t V i s i b i l i t y ( View . GONE ) ;
}
p r i v a t e v o i d addNewItem ( ) {
addingNew = t r u e ;
m y E d i t T e x t . s e t V i s i b i l i t y ( View . VISIBLE ) ;
myEditText . r e q u e s t F o c u s ( ) ;
}
index ) {
p r i v a t e void removeItem ( i n t
t o d o I t e m s . remove ( i n d e x ) ;
aa . n o t i f y D a t a S e t C h a n g e d ( ) ;
}

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

73

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (XI)


Dentro de onCreate, modificamos onKeyListener para
incluir una llamada a cancelAdd despues de a
nadir un item:
src/com.rasi.todolist/TodoList.java (fragmento)
1
3
5
7
9
11
13

m y E d i t T e x t . s e t O n K e y L i s t e n e r ( new O n K e y L i s t e n e r ( ) {
p u b l i c b o o l e a n onKey ( View v , i n t keyCode , KeyEvent e v e n t ) {
i f ( e v e n t . g e t A c t i o n ( ) == KeyEvent . ACTION DOWN)
i f ( keyCode == KeyEvent . KEYCODE DPAD CENTER)
{
t o d o I t e m s . add ( 0 , m y E d i t T e x t . g e t T e x t ( ) . t o S t r i n g ( ) ) ;
myEditText . s e t T e x t ( ) ;
aa . n o t i f y D a t a S e t C h a n g e d ( ) ;
cancelAdd ( ) ;
return true ;
}
return false ;
}
});

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

74

Creaci
on de Interfaces de Usuario: Men
us

Menus para la TodoList (XII)

Modificamos el layout res/layout/main.xml para que la


caja de texto este oculta hasta que se elija la opcion de a
nadir
un nuevo elemento.
res/layout/main.xml (fragmento)

2
4
6

<E d i t T e x t
a n d r o i d : i d=@+i d / m y E d i t T e x t
a n d r o i d : l a y o u t w i d t h= f i l l p a r e n t
a n d r o i d : l a y o u t h e i g h t= w r a p c o n t e n t
a n d r o i d : t e x t=
a n d r o i d : v i s i b i l i t y = gone
/>

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

75

Bibliografa

Contenidos
1

El Manifiesto de una Aplicaci


on Android

Creaci
on y destrucci
on de Aplicaciones y Actividades

Recursos de las Aplicaciones Android

Creaci
on de Interfaces de Usuario: Views

Creaci
on de Interfaces de Usuario: Layouts

Creaci
on de Interfaces de Usuario: Creaci
on de nuevas Views

Creaci
on de Interfaces de Usuario: Creaci
on de Controles Compuestos

Creaci
on de Interfaces de Usuario: Men
us

Bibliografa

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

76

Bibliografa

Bibliografa

Captulos 3 y 4 de Professional Android Application


Development. Reto Meier. Ed. Wrox, 2009.
Captulos 2 y 3 de Hello, Android. Introducing Googles
Mobile Development Platform. Ed Burnette. Ed. The
Pragmatic Bookshelf, 2009.
Documentaci
on del Android SDK: en la carpeta docs del
directorio del SDK, o en
http://developer.android.com/guide/index.html
Documentaci
on sobre Android (tutoriales, vdeos,...):
http://developer.android.com

GSyC - 2009

Android: Fundamentos de la Creaci


on de Aplicaciones

77

También podría gustarte