Anda di halaman 1dari 39

Android: Fundamentos de la Creacin de Aplicaciones o

Redes, Aplicaciones y Servicios en Internet (RASI) Departamento de Sistemas Telemticos y Computacin (GSyC) a o

Octubre de 2009

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

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 Creacin de Aplicaciones o

Contenidos
1 2 3 4 5 6 7 8 9

El Maniesto de una Aplicacin Android o Creacin y destruccin de Aplicaciones y Actividades o o Recursos de las Aplicaciones Android Creacin de Interfaces de Usuario: Views o Creacin de Interfaces de Usuario: Layouts o Creacin de Interfaces de Usuario: Creacin de nuevas Views o o Creacin de Interfaces de Usuario: Creacin de Controles Compuestos o o Creacin de Interfaces de Usuario: Mens o u Bibliograf a
Android: Fundamentos de la Creacin de Aplicaciones o El Maniesto de una Aplicacin Android o 3

GSyC - 2009

Contenidos
1 2 3 4 5 6 7 8 9

El Maniesto de una Aplicacin Android o Creacin y destruccin de Aplicaciones y Actividades o o Recursos de las Aplicaciones Android Creacin de Interfaces de Usuario: Views o Creacin de Interfaces de Usuario: Layouts o Creacin de Interfaces de Usuario: Creacin de nuevas Views o o Creacin de Interfaces de Usuario: Creacin de Controles Compuestos o o Creacin de Interfaces de Usuario: Mens o u Bibliograf a
Android: Fundamentos de la Creacin de Aplicaciones o 4

GSyC - 2009

El Maniesto de una Aplicacin Android o

Componentes de las Aplicaciones Android


Actividades (Activities): Cada pantalla de una aplicacin. Utilizan Vistas o (Views) como componentes que muestran informacin y responden a las o acciones del usuario Servicios (Services): Componentes de la aplicacin que se ejecutan de o forma invisible, actualizando los datos y las Actividades, y disparando Noticaciones. Realizan el procesamiento normal de la aplicacin que debe o continuar incluso cuando las Actividades de la aplicacin no estn visibles. o a 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 intencin de que se haga algo. El o sistema determinar el destinatario que lo efectuar. a a Receptores de Broadcast (Broadcast Receivers): Los crean las aplicaciones como consumidores de las Intenciones de broadcast que cumplan ciertos criterios. Noticaciones (Notications): Mecanismo que permite a las aplicaciones sealar algo a los usuarios sin interrumpir la Actividad en primer plano. n
GSyC - 2009 El Maniesto de una Aplicacin Android o Android: Fundamentos de la Creacin de Aplicaciones o 5

El Maniesto de una Aplicacin (I) o


Cada Aplicacin incluye un chero de Maniesto, o AndroidManifest.xml. Dene la estructura de la aplicacin y sus componentes. o Incluye un nodo ra y un nodo para cada uno de sus tipos de z componentes. A travs de ltros de intenciones y permisos determina e cmo interactuar con otras aplicaciones. o a Nodo ra manifest: incluye el nombre del paquete de la z aplicacin: o
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 Creacin de Aplicaciones o

El Maniesto de una Aplicacin Android o

El Maniesto de una Aplicacin (II) o


Nodo application:
Indica metadatos de la aplicacin (t o tulo, 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 El Maniesto de una Aplicacin Android o

Android: Fundamentos de la Creacin de Aplicaciones o

El Maniesto de una Aplicacin (III) o


Nodo uses-permission:
Declara los permisos que la aplicacin necesita para operar. o Sern presentados al usuario durante la instalacin para que a o los acepte o deniegue. Se requieren permisos para utilizar muchos de los servicios nativos Android (enviar SMS, hacer llamadas, usar servicios de localizacin. . . ) o Permisos ms habituales: INTERNET, READ_CONTACTS, a 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 Creacin de Aplicaciones o

El Maniesto de una Aplicacin Android o

El Maniesto de una Aplicacin (IV) o

Nodo permission:
Dene un permiso que se requiere para que otras aplicaciones puedan acceder a partes restringidas de la aplicacin o Las otras aplicaciones necesitarn poner un uses-permission a en su Maniesto para utilizar este permiso
<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>

2 4

GSyC - 2009 El Maniesto de una Aplicacin Android o

Android: Fundamentos de la Creacin de Aplicaciones o

El Maniesto de una Aplicacin (V) o

Nodo instrumentation:
Permite denir tests de ejecucin para las Actividades y o 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>

Ms informacin sobre el maniesto en: a o


http://code.google.com/android/devel/bblocks-manifest.html

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

10

Creacin y destruccin de Aplicaciones y Actividades o o

Contenidos
1 2 3 4 5 6 7 8 9

El Maniesto de una Aplicacin Android o Creacin y destruccin de Aplicaciones y Actividades o o Recursos de las Aplicaciones Android Creacin de Interfaces de Usuario: Views o Creacin de Interfaces de Usuario: Layouts o Creacin de Interfaces de Usuario: Creacin de nuevas Views o o Creacin de Interfaces de Usuario: Creacin de Controles Compuestos o o Creacin de Interfaces de Usuario: Mens o u Bibliograf a
Android: Fundamentos de la Creacin de Aplicaciones o 11

GSyC - 2009 Creacin y destruccin de Aplicaciones y Actividades o o

Chapter 3: Creating Applications and Activities

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 manages the process of each application, andiguales athat of each Activity within it. los sistemas Aplicaciones Android no son by extension las aplicaciones en operativosrun time handles the terminationhaymanagement of an Activitys process,que normalmente o While the tradicionales: slo and una en primer plano the Activitys state helps determine the priority of its parent application. The application priority, in turn, inuences ocupa likelihoodla pantalla.will terminate it and the Activities running within it. toda that the run time the Las Aplicaciones estn formadas por Actividades (pantallas). a Activity Stacks Al arrancareach Activity is determined by its position on the Activity stack, a last-inrst-out collection una nueva aplicacin, pasa a primer plano situando una o The state of of all the Actividad currently running Activities. When a new Activity starts, thebutton, orforeground screen is encima stack.lathe user hubiera, formndose as the foreground de de If que navigates back using the Back current una Pila Activa moved to the top of the ity is closed, the next Activity on the stack moves up and becomes active. This process is illustrated in Actividades. Figure 3-7. El botn Back ( ) cierra la Actividad en primer plano y recupera la de la o As described previously in this chapter, an applications priority is inuenced by its highest-priority cima de la Pila (cerrando la uses this stack to determine the priority of applications based o Activity. The Android memory manager aplicacin en su caso).
on their Activities when deciding which application to terminate to free resources.
New Activity New Activity started Active Activity 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 Creacin de Aplicaciones o

12

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:

Creacin y destruccin de Aplicaciones y Actividades o o

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 terminacin o en cualquier momento

En general, cada aplicacin Android se ejecuta en un proceso o 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 aplicacin, o y por extensin de cada Actividad que contenga. o

GSyC - 2009 Creacin y destruccin de Aplicaciones y Actividades o o

Android: Fundamentos de la Creacin de Aplicaciones o

13

Aplicaciones, Actividades, Vistas, Diseos n


Una Actividad representa una pantalla que una aplicacin o muestra a sus usuarios (equivalente al concepto de Form en aplicaciones de escritorio convencionales). La mayor de las Actividades ocupan toda la pantalla del a dispositivo, pero pueden crearse actividades semi-transparentes, otantes o que utilizan cajas de dilogo. a Para crear una nueva Actividad en una aplicacin se hereda de o 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 Diseos (Layouts) que mostrar la n a aplicacin. o
GSyC - 2009 Android: Fundamentos de la Creacin de Aplicaciones o 14

Creacin y destruccin de Aplicaciones y Actividades o o

Creacin de una Actividad o


src/com.rasi.myapplication/MyActivity.java 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 ) ; } } 2 4 6 8 10 12

Para usar una Actividad en una Aplicacin, hay que registrarla en el Maniesto, o incluyendo las Intenciones a las que responder: a
AndroidManifest.xml 1 <a c t i v i t y a d r d : l a b e l= s t r i n g / app name Chaptern 3:o iCreating@Applications and Activities

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 applications e= a n d r o i d . i n that tare c t i o n . MAIN /> <a c t i o n a n d r o i d : n a m generally those t e n . a interacting with the user at the time. The prioritizationn d r o i d : n a m e= a n d rini thei nextnsection. g o r y . LAUNCHER /> 5 <c a t e g o r y a process is discussed o d . n t e t . c a t e </ 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 Creacin de Aplicaciones o

15

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

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

Procesos y prioridades
Arbol de prioridades:

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

Prioridad Cr tica:

Procesos a 3 shows the priority tree used to determine the order of application termination. activos: Los que estn interactuando con el
Critical Priority

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

1. Active Process

Prioridad Alta:

2. Visible Process

High Priority

3. Started Service Process Low Priority

4. Background Process

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

5. Empty Process

Figure 3-3

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 Creacin de Aplicaciones o

16

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:

Creacin y destruccin de Aplicaciones y Actividades o o

Estados de una Actividad (I)

I T S A LIVE !

37

Figure 2.3: Life cycle of an Android activity


GSyC - 2009 Creacin y destruccin de Aplicaciones y Actividades o o Android: Fundamentos de la Creacin de Aplicaciones o 17

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

Life Cycles of the Rich and Famous

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, you do Actividad est state is about la pila, Activo (Running): La get notied when the encima de to change es a 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 otra Actividad pase atime: activa, sta pasar a estar pausada. estar e a them at the appropriate Pausado (Paused):: La Actividad esthe activity rst starts up. el onCreate(Bundle) This is called when visible pero no tiene You can use to perform one-time initialization such as creating foco. Se alcanzaiteste estado cuando pasa a activa otra the user interface. onCreate( ) takes one parameter that is either Actividad or some state information no ocupa toda la pantalla. null transparente o que previously saved by the 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 Creacin de Aplicaciones o 18

Creacin y destruccin de Aplicaciones y Actividades o o

Estados de una Actividad (III)


En la clase Activity existen mtodos para ser redenidos e (overrided) en sus clases derivadas para incluir el cdigo a o ejecutar en las transiciones entre estados: OnCreate, onStart, onPause, onStop. . . . Los mtodos redenidos siempre deben llamar al mtodo de la e e 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 }

is

visible .

GSyC - 2009 Creacin y destruccin de Aplicaciones y Actividades o o

Android: Fundamentos de la Creacin de Aplicaciones o

19

Mtodos de transicin entre estados (I) e o

onCreate(Bundle):
Se invoca cuando la Actividad se arranca por primera vez. Se utiliza para tareas de inicializacin a realizar una sola vez, o como crear la interfaz de usuario de la Actividad. Su parmetro es null o informacin de estado guardada a o 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 Creacin de Aplicaciones o

20

Creacin y destruccin de Aplicaciones y Actividades o o

Mtodos de transicin entre estados (II) e o


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 necesitar durante un tiempo. a Si hay escasez de recursos en el sistema, este mtodo podr no e a 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 mtodo podr no e a llegar a ser invocado y la Actividad ser destruida directamente.
GSyC - 2009 Creacin y destruccin de Aplicaciones y Actividades o o Android: Fundamentos de la Creacin de Aplicaciones o 21

Mtodos de transicin entre estados (III) e o

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

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

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

22

Recursos de las Aplicaciones Android

Contenidos
1 2 3 4 5 6 7 8 9

El Maniesto de una Aplicacin Android o Creacin y destruccin de Aplicaciones y Actividades o o Recursos de las Aplicaciones Android Creacin de Interfaces de Usuario: Views o Creacin de Interfaces de Usuario: Layouts o Creacin de Interfaces de Usuario: Creacin de nuevas Views o o Creacin de Interfaces de Usuario: Creacin de Controles Compuestos o o Creacin de Interfaces de Usuario: Mens o u Bibliograf a
Android: Fundamentos de la Creacin de Aplicaciones o Recursos de las Aplicaciones Android 23

GSyC - 2009

Tipos de recursos

Hay distintos tipos de recursos, que se denen en cheros XML alojados en una cierta subcarpeta de res:
Valores simples (carpeta values): Strings, colores y dimensiones. Recursos dibujables (carpeta drawable): cheros con imgenes, incluyendo el icono de la aplicacin a o Animaciones (carpeta anim) Mens (carpeta menu) u Diseos (carpeta layout) n Estilos (carpeta values) Varios (carpeta xml)

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

24

Recursos de las Aplicaciones Android

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

Las dimensiones pueden tener distintas unidades: px, in, mm, pt, dp, sp
dp: Density-independent pixels (tambin dip), pixels independientes de e 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 tambin escalados e al tamao de font elegido por el usuario. n
1 <dimen name= s i x t e e n s p >16 s p</ dimen>

Un chero XML contiene la denicin de uno o ms de estos o a elementos. Todos estos recursos se identican con el valor de su atributo name.
GSyC - 2009 Recursos de las Aplicaciones Android Android: Fundamentos de la Creacin de Aplicaciones o 25

Drawables

Para cheros de bitmaps o de imgenes estirables (.9.png) a Tambin puede denirse uno de estos recursos como un e 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 chero XML puede contener uno o ms recuadros de a color) Los cheros se identican con su nombre de chero, y los recuadros de color con el valor de su atributo name.

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

26

Recursos de las Aplicaciones Android

Animaciones

Para realizar animaciones sencillas sobre uno o varios grcos: a rotaciones, fading, movimiento y estiramiento. Cada animacin se dene en un chero XML o Estos recursos se identican con su nombre de chero.

GSyC - 2009 Recursos de las Aplicaciones Android

Android: Fundamentos de la Creacin de Aplicaciones o

27

Mens u

Existen tres tipos de mens: Men de opciones, u u men contextual y submen u u Un men de opciones o contextual se dene en un chero u XML. Un submen se dene dentro de otro men. u u Un men de opciones o contextual se identica con su nombre u de chero. Un submen se identica con el valor de su atributo id. u Un elemento de un men tambin puede ser identicado con u e el valor de su atributo id.

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

28

Recursos de las Aplicaciones Android

Layouts

Un layout se dene en un chero XML. Dentro de un layout se denen los elementos que lo componen: Views, ViewGroups Un layout se identica con su nombre de chero. Un elemento de un layout tambin puede ser identicado con e el valor de su atributo id.

GSyC - 2009 Recursos de las Aplicaciones Android

Android: Fundamentos de la Creacin de Aplicaciones o

29

Estilos

Un estilo es uno o ms atributos que se aplican a un elemento. a Un tema es uno o ms atributos que se aplican a todo lo que a hay en pantalla. Un tema se asigna como atributo a una Actividad en su Maniesto. Se denen 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 tambin puede ser e referenciado de la manera adecuada segn el tipo de recurso. u

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

30

Recursos de las Aplicaciones Android

Recursos para diferentes idiomas y diferente hardware


Pueden especicarse recursos alternativos para diferentes idiomas o diferente hardware con subcarpetas con el mismo nombre que la original ms un sujo o conjunto de sujos. a Ejemplos:
Valores simples para idioma espaol: values-es n Layouts para terminal girado: layout-land Layouts para teclado sobreimpresionado: layout-keysexposed

Pueden ponerse varios sujos encadenados Dentro de esas subcarpetas se colocarn cheros a especializados con el mismo nombre que el que tienen en la carpeta bsica (ej: strings.xml) a La aplicacin al usar un recurso elegir de entre los o a disponibles aquel en el encajen ms sujos. a
GSyC - 2009 Recursos de las Aplicaciones Android Android: Fundamentos de la Creacin de Aplicaciones o 31

Cambios de conguracin en tiempo de ejecucin o o


Una aplicacin puede responder a ciertos cambios de conguracin o o mientras se ejecuta. Si lo hace, debe especicarse en el Maniesto de la aplicacin: o
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 invocar el mtodo a e 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 Creacin de Aplicaciones o

32

Recursos de las Aplicaciones Android

Utilizacin de recursos en el cdigo (I) o o


Se accede a los recursos de una aplicacin a travs de la clase esttica R, o e a regenerada a partir de los cheros XML cada vez que se recompila el proyecto. La clase R incluye subclases estticas para cada uno de los tipos de a recursos para los que se ha denido al menos un recurso. Ej: R.string, R.drawable Cada subclase expone sus recursos asociados como variables, con nombre igual a los identicadores 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 mtodo (como setContentView) acepta e como parmetro un identicador de recurso, se le puede pasar una de a 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 Recursos de las Aplicaciones Android

Android: Fundamentos de la Creacin de Aplicaciones o

33

Utilizacin de recursos en el cdigo (II) o o


La tabla de recursos de una aplicacin est representada por o a una instancia de la clase Resources. Cuando se necesita una instancia del recurso se usan mtodos e 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 5 7 9 11 13 15 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 ) ; 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 ) ; int [] 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 Creacin de Aplicaciones o 34

GSyC - 2009

Recursos de las Aplicaciones Android

Referenciacin de Recursos en otros Recursos o


Para referenciar un recurso en otro recurso se utiliza la notacin o @:
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 Recursos de las Aplicaciones Android

Android: Fundamentos de la Creacin de Aplicaciones o

35

Referenciacin de Recursos del Sistema o


Las aplicaciones nativas de Android externalizan muchos de sus recursos para que sean accesibles desde otras aplicaciones. Para acceder a ellos en el cdigo Java se utiliza android.R en vez de o 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 />

Tambin es posible acceder a recursos del tema actual (para e 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 Creacin de Aplicaciones o

36

Creacin de Interfaces de Usuario: Views o

Contenidos
1 2 3 4 5 6 7 8 9

El Maniesto de una Aplicacin Android o Creacin y destruccin de Aplicaciones y Actividades o o Recursos de las Aplicaciones Android Creacin de Interfaces de Usuario: Views o Creacin de Interfaces de Usuario: Layouts o Creacin de Interfaces de Usuario: Creacin de nuevas Views o o Creacin de Interfaces de Usuario: Creacin de Controles Compuestos o o Creacin de Interfaces de Usuario: Mens o u Bibliograf a
Android: Fundamentos de la Creacin de Aplicaciones o Creacin de Interfaces de Usuario: Views o 37

GSyC - 2009

Terminolog a

Vistas (Views): Clase bsica que representa a un elemento a bsico de IU en Android. En otros tipo de aplicaciones se a 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 mltiples u Views hijas. Diseos (Layouts): Extensiones de la clase ViewGroup para n gestionar la disposicin de sus Views hijas. o

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

38

Creacin de Interfaces de Usuario: Views o

Creacin de la IU de una Actividad con Views o

La forma habitual es establecer el Layout al principio del mtodo onCreate. e Una vez establecido, pueden obtenerse referencias a las Views contenidas en el Layout llamando al mtodo findViewById: e
1 3 5 7 @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 Creacin de Interfaces de Usuario: Views o

Android: Fundamentos de la Creacin de Aplicaciones o

39

Views estndar habituales a


TextView: Etiqueta de texto de solo lectura. EditText: Caja de texto editable, que acepta entradas multil nea. 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: Botn pulsable estndar. o a Checkbox: Botn de dos estados representado por un caja o marcada o desmarcada. RadioButton: Varios botones de dos estados, agrupados de forma que slo uno del grupo puede estar activado. o
GSyC - 2009 Android: Fundamentos de la Creacin de Aplicaciones o 40

Creacin de Interfaces de Usuario: Layouts o

Contenidos
1 2 3 4 5 6 7 8 9

El Maniesto de una Aplicacin Android o Creacin y destruccin de Aplicaciones y Actividades o o Recursos de las Aplicaciones Android Creacin de Interfaces de Usuario: Views o Creacin de Interfaces de Usuario: Layouts o Creacin de Interfaces de Usuario: Creacin de nuevas Views o o Creacin de Interfaces de Usuario: Creacin de Controles Compuestos o o Creacin de Interfaces de Usuario: Mens o u Bibliograf a
Android: Fundamentos de la Creacin de Aplicaciones o Creacin de Interfaces de Usuario: Layouts o 41

GSyC - 2009

Layouts estndar habituales a

FrameLayout: Coloca cada View en la esquina izquierda. Cada nueva View que se aade tapa a la anterior. n LinearLayout: Coloca cada View hija en l nea, de forma horizontal (una la 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 dene en coordenadas absolutas

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

42

Creacin de Interfaces de Usuario: Layouts o

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 Creacin de Interfaces de Usuario: Creacin de nuevas Views o o

Android: Fundamentos de la Creacin de Aplicaciones o

43

Contenidos
1 2 3 4 5 6 7 8 9

El Maniesto de una Aplicacin Android o Creacin y destruccin de Aplicaciones y Actividades o o Recursos de las Aplicaciones Android Creacin de Interfaces de Usuario: Views o Creacin de Interfaces de Usuario: Layouts o Creacin de Interfaces de Usuario: Creacin de nuevas Views o o Creacin de Interfaces de Usuario: Creacin de Controles Compuestos o o Creacin de Interfaces de Usuario: Mens o u Bibliograf a
Android: Fundamentos de la Creacin de Aplicaciones o 44

GSyC - 2009

Creacin de Interfaces de Usuario: Creacin de nuevas Views o o

Creacin de nuevas Views a partir de las existentes o


Se extiende una View ya existente, redeniendo los mtodos que denen su e apariencia y su comportamiento:
MyTextView.java 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 ) ; 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 ) ;

2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32

@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

...

// 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 ) ; } [ . . . 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 ... ]

@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 . . . ] // 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 Creacin de Interfaces de Usuario: Creacin de nuevas Views o o

Android: Fundamentos de la Creacin de Aplicaciones o

45

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 15 17 19 21 23 25 27 29 31 } 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 (); } p u b l i c TodoListItemView ( Context context ) { super ( context ) ; init (); } 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 () { } @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 Creacin de Aplicaciones o

46

Creacin de Interfaces de Usuario: Creacin de nuevas Views o o

Mejora del aspecto de la TodoList (II)


Creamos un nuevo colors.xml en res/values:
res/values/colors.xml <? 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>

2 4 6

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 Creacin de Interfaces de Usuario: Creacin de nuevas Views o o

Android: Fundamentos de la Creacin de Aplicaciones o

47

Mejora del aspecto de la TodoList (III)


Ahora podemos incluir el mtodo init en e TodoListItemView:
src/com.rasi.todolist/TodoListItemView.java (fragmento) private private private private Paint marginPaint ; Paint l i n e P a i n t ; int paperColor ; f l o a t margin ;

2 4 6 8 10 12 14 16 18

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 ( ) ; // 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 ) ) ; // 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 Creacin de Aplicaciones o

48

Creacin de Interfaces de Usuario: Creacin de nuevas Views o o

Mejora del aspecto de la TodoList (IV)


Renamos el mtodo onDraw utilizando las variables de e instancia inicialidadas en init:
src/com.rasi.todolist/TodoListItemView.java (fragmento) 1 3 5 7 9 11 13 15 17 19 21 } @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 ); // 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 ) ; // 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 ) ; // 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 Creacin de Interfaces de Usuario: Creacin de nuevas Views o o

Android: Fundamentos de la Creacin de Aplicaciones o

49

Mejora del aspecto de la TodoList (V)

Creamos un nuevo Layout para especicar cmo se o dispondrn los elementos de la lista usando la nueva View: a
res/layout/todolist item.xml <? 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 />

2 4 6 8 10

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

50

Creacin de Interfaces de Usuario: Creacin de nuevas Views o o

Mejora del aspecto de la TodoList (VI)


Ahora en el onCreate de ToDoList.java reemplazamos los parmetros pasados al ArrayAdapter para hacer uso del a 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 3 5 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 ) ;

GSyC - 2009 Creacin de IU: Creacin de Controles Compuestos o o

Android: Fundamentos de la Creacin de Aplicaciones o

51

Contenidos
1 2 3 4 5 6 7 8 9

El Maniesto de una Aplicacin Android o Creacin y destruccin de Aplicaciones y Actividades o o Recursos de las Aplicaciones Android Creacin de Interfaces de Usuario: Views o Creacin de Interfaces de Usuario: Layouts o Creacin de Interfaces de Usuario: Creacin de nuevas Views o o Creacin de Interfaces de Usuario: Creacin de Controles Compuestos o o Creacin de Interfaces de Usuario: Mens o u Bibliograf a
Android: Fundamentos de la Creacin de Aplicaciones o 52

GSyC - 2009

Creacin de IU: Creacin de Controles Compuestos o o

Creacin de controles compuestos (I) o


Un Control Compuesto es aquel formado por mltiples Views u que trabajan juntos. Al crearlo se dene su disposicin, apariencia y la interacin o o entre sus Views. Se crean extendiendo un ViewGroup (o ms bien un Layout): a
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 Creacin de IU: Creacin de Controles Compuestos o o

Android: Fundamentos de la Creacin de Aplicaciones o

53

Creacin de controles compuestos (II) o


Para disear su interfaz de usuario se utiliza un Layout: n
clearable edit text.xml <? 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>

2 4 6 8 10 12 14 16

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

54

Creacin de IU: Creacin de Controles Compuestos o o

Creacin de controles compuestos (III) o


Para asignar el Layout al nuevo control compuesto hay que redenir su constructor:
MyCompoundView.java (fragmento) 1 3 5 7 9 11 13 15 17 19 } } 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 ) ; // 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 ) ; // Hook up t h e f u n c t i o n a l i t y hookupButton ( ) ;

GSyC - 2009 Creacin de Interfaces de Usuario: Mens o u

Android: Fundamentos de la Creacin de Aplicaciones o

55

Contenidos
1 2 3 4 5 6 7 8 9

El Maniesto de una Aplicacin Android o Creacin y destruccin de Aplicaciones y Actividades o o Recursos de las Aplicaciones Android Creacin de Interfaces de Usuario: Views o Creacin de Interfaces de Usuario: Layouts o Creacin de Interfaces de Usuario: Creacin de nuevas Views o o Creacin de Interfaces de Usuario: Creacin de Controles Compuestos o o Creacin de Interfaces de Usuario: Mens o u Bibliograf a
Android: Fundamentos de la Creacin de Aplicaciones o 56

GSyC - 2009

Creacin de Interfaces de Usuario: Mens o u

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

Men Contextual: Men que se despliega al pulsar el botn u u o central del terminal, o al tocar prolongadamente la pantalla tctil. a Submen: Men otante que se despliega al seleccionar una u u entrada denida como submen en alguno de los mens u u anteriores. Dentro de un submen NO puede haber otro. u
GSyC - 2009 Creacin de Interfaces de Usuario: Mens o u Android: Fundamentos de la Creacin de Aplicaciones o 57

Creacin de un Men de Opciones para una Actividad o u


Hay que redenir el mtodo OnCreateOptionsMenu, que se invocar la primera vez que se muestre el e a men de opciones de la Actividad. u En la implementacin redenida es necesario llamar al mtodo de la clase Activity. o e Para aadir entradas al men se utiliza el mtodo add de la clase Menu, que requiere los siguientes n u e parmetros: a
un identicador de grupo para poder agrupar entradas un identicador de la entrada, que permitir saber qu entrada se ha pulsado cuando se invoque el manejador a e onOptionsItemSelected. Cada identicador de una entrada deber declararse como atributo de clase de la a Actividad. un nmero de orden para la colocacin de la entrada en el men u o u el texto de la entrada
static final p r i v a t e i n t MENU ITEM = Menu . FIRST ;

2 4 6 8 10 12 14 16 18 20

@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 ; // 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 Creacin de Aplicaciones o

58

Creacin de Interfaces de Usuario: Mens o u

Elementos del Men de Opciones u

La clase MenuItem permite aadir detalles adicionales a la n entrada:


Checkboxes o Radio Buttons, slo visibles en el o men expandido o en un submen. u u Atajos de teclado T tulos abreviados Iconos (slo visibles en el men de iconos) o u Manejador a ejecutar cuando se seleccione este elemento (NO recomendado, es ms eciente usar onOptionsItemSelected) a Intenciones, que sern activadas cuando se seleccione este a elemento.

GSyC - 2009 Creacin de Interfaces de Usuario: Mens o u

Android: Fundamentos de la Creacin de Aplicaciones o

59

Modicacin dinmica del Men de Opciones o a u

Puede modicarse un men cada vez que se muestra u redeniendo el mtodo onPrepareOptionsMenu: 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 ) ; MenuItem menuItem = menu . f i n d I t e m (MENU ITEM ) ; [ } ... m o d i f y menu i t e m s ... ]

2 4 6 8 10

return true ;

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

60

Creacin de Interfaces de Usuario: Mens o u

Manejar las selecciones del men u


A travs del unico manejador onOptionsItemSelected. e El elemento seleccionado se recibe como parmetro MenuItem. a Habr que comparar su identicador con los establecidos al a 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 ( ) ) { // 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 ;

2 4 6 8 10 12 14

...

// 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 Creacin de Interfaces de Usuario: Mens o u

Android: Fundamentos de la Creacin de Aplicaciones o

61

Creacin de un Submen o u

A travs de addSubMenu, que admite los mismos parmetros e a que add para aadir elementos normales. n Los elementos de dentro del submen se gestionan igual que u los del men de opciones. u Adicionalmente se puede aadir un icono para el men de n u opciones y para la cabecera del submen cuando se muestre. u
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 ) ;

2 4

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

62

Creacin de Interfaces de Usuario: Mens o u

Mens Contextuales u
Puede crearse un men contextual para una Actividad redeniendo su mtodo u e onCreateContextMenu y registrando la View que lo usar: a
1 3 5 7 9 11 13 } @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 ) ; 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 contextual se manejan de forma similar a las del u men de opciones, redeniendo el mtodo onContextItemSelected de la u e Actividad:
1 3 5 7 } @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 ) ; [ ... H a n d l e menu i t e m s e l e c t i o n ... ]

return false ;

GSyC - 2009 Creacin de Interfaces de Usuario: Mens o u

Android: Fundamentos de la Creacin de Aplicaciones o

63

Mens para la TodoList (I) u


Creamos dos cheros .png para iconos del men: Uno con un u signo + para aadir una nueva tarea (add_new_item.png), n y otro con un aspa para borrar una tarea (remove_item.png). Copiamos las imgenes a la carpeta res/drawable. a Modicamos el chero res/values/strings.xml para denir los textos para los mens: u
res/values/strings.xml <? 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>

2 4 6

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

64

Creacin de Interfaces de Usuario: Mens o u

Mens para la TodoList (II) u


Creamos un nuevo tema para la aplicacin creando un nuevo o chero res/values/styles.xml, basado en un tema estndar de Android y jando un tamao del texto: a n
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 Aplicacin en el maniesto: o


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 Creacin de Interfaces de Usuario: Mens o u

Android: Fundamentos de la Creacin de Aplicaciones o

65

Mens para la TodoList (III) u

Aadimos constantes para denir los identicadores de los n elementos del men: u
src/com.rasi.todolist/TodoList.java (fragmento) 1 static static 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 ;

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

66

Creacin de Interfaces de Usuario: Mens o u

Mens para la TodoList (IV) u


Redenimos onCreateOptionsMenu para aadir los n elementos del men de opciones: u
src/com.rasi.todolist/TodoList.java (fragmento) @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 ) ; // 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 ) ; // 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 ;

2 4 6 8 10 12 14 16 18

GSyC - 2009 Creacin de Interfaces de Usuario: Mens o u

Android: Fundamentos de la Creacin de Aplicaciones o

67

Mens para la TodoList (V) u


Para crear un men contextual primero modicamos onCreate u para indicar que la ListView tendr dicho men: a u
src/com.rasi.todolist/TodoList.java (fragmento) 1 3 5 7 } 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 ) { [ ... e x i s t i n g o n C r e a t e method . . . ]

registerForContextMenu ( myListView ) ;

Ahora redenimos onCreateContextMenu:


src/com.rasi.todolist/TodoList.java (fragmento) 1 3 5 7 9 } @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 ) ; 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 Creacin de Aplicaciones o

68

Creacin de Interfaces de Usuario: Mens o u

Mens para la TodoList (VI) u


En el mtodo onCreate necesitamos que la lista de items, el e ArrayAdapter y los controles tengan visibilidad en otros mtodos, as que los convertimos en atributos: e
src/com.rasi.todolist/TodoList.java (fragmento) 1 3 5 7 9 11 13 15 17 19 21 } 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 ) ; // 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 ) ; 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 >(); [ ... 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 Creacin de Interfaces de Usuario: Mens o u

Android: Fundamentos de la Creacin de Aplicaciones o

69

Mens para la TodoList (VII) u


Redenimos onPrepareOptionsMenu para que muestre Cancel en vez de Delete mientras se est aadiendo una a n entrada:
src/com.rasi.todolist/TodoList.java (fragmento) 1 3 5 7 9 11 13 15 17 } 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 ) ; 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 ) ; 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); return true ;

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

70

Creacin de Interfaces de Usuario: Mens o u

Mens para la TodoList (VIII) u


Redenimos onOptionsItemSelected en funcin de los mtodos o e cancelAdd, addNewItem y removeItem que deniremos luego:
src/com.rasi.todolist/TodoList.java (fragmento) 1 3 5 7 9 11 13 15 17 19 21 23 } @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 ; } } return false ;

GSyC - 2009 Creacin de Interfaces de Usuario: Mens o u

Android: Fundamentos de la Creacin de Aplicaciones o

71

Mens para la TodoList (IX) u


Redenimos onContextItemSelected:
src/com.rasi.todolist/TodoList.java (fragmento) @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 ; removeItem ( i n d e x ) ; return true ;

2 4 6 8 10 12 14 16

} } return false ;

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

72

Creacin de Interfaces de Usuario: Mens o u

Mens para la TodoList (X) u


Denimos los mtodos de apoyo cancelAdd, addNewItem y e 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 Creacin de Interfaces de Usuario: Mens o u

Android: Fundamentos de la Creacin de Aplicaciones o

73

Mens para la TodoList (XI) u


Dentro de onCreate, modicamos onKeyListener para incluir una llamada a cancelAdd despus de aadir un item: e n
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 Creacin de Aplicaciones o

74

Creacin de Interfaces de Usuario: Mens o u

Mens para la TodoList (XII) u

Modicamos el layout res/layout/main.xml para que la caja de texto est oculta hasta que se elija la opcin de aadir e o n un nuevo elemento.
res/layout/main.xml (fragmento) <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 />

2 4 6

GSyC - 2009 Bibliograf a

Android: Fundamentos de la Creacin de Aplicaciones o

75

Contenidos
1 2 3 4 5 6 7 8 9

El Maniesto de una Aplicacin Android o Creacin y destruccin de Aplicaciones y Actividades o o Recursos de las Aplicaciones Android Creacin de Interfaces de Usuario: Views o Creacin de Interfaces de Usuario: Layouts o Creacin de Interfaces de Usuario: Creacin de nuevas Views o o Creacin de Interfaces de Usuario: Creacin de Controles Compuestos o o Creacin de Interfaces de Usuario: Mens o u Bibliograf a
Android: Fundamentos de la Creacin de Aplicaciones o 76

GSyC - 2009

Bibliograf a

Bibliograf a

Cap tulos 3 y 4 de Professional Android Application Development. Reto Meier. Ed. Wrox, 2009. Cap tulos 2 y 3 de Hello, Android. Introducing Googles Mobile Development Platform. Ed Burnette. Ed. The Pragmatic Bookshelf, 2009. Documentacin del Android SDK: en la carpeta docs del o directorio del SDK, o en http://developer.android.com/guide/index.html Documentacin sobre Android (tutoriales, v o deos,...): http://developer.android.com

GSyC - 2009

Android: Fundamentos de la Creacin de Aplicaciones o

77

Anda mungkin juga menyukai