Redes, Aplicaciones y Servicios en Internet (RASI) Departamento de Sistemas Telemticos y Computacin (GSyC) a o
Octubre de 2009
GSyC - 2009
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
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
GSyC - 2009
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
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
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>
GSyC - 2009
10
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
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
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:
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
13
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
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
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:
I T S A LIVE !
37
During its lifetime, each activity of an Estados de una Actividad (II) Android program can be in one of
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
is
visible .
19
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
20
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
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
22
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
24
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
26
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.
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
28
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.
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
30
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
GSyC - 2009
32
33
GSyC - 2009
35
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
36
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
38
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 ) ;
39
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
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
42
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>
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
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32
...
45
GSyC - 2009
46
2 4 6
47
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
48
49
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
50
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 ) ;
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
53
2 4 6 8 10 12 14 16
GSyC - 2009
54
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
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
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
58
59
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
60
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 .
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
62
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 ;
63
2 4 6
GSyC - 2009
64
65
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
66
2 4 6 8 10 12 14 16 18
67
registerForContextMenu ( myListView ) ;
GSyC - 2009
68
@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 . . . ]
69
GSyC - 2009
70
71
2 4 6 8 10 12 14 16
} } return false ;
GSyC - 2009
72
73
GSyC - 2009
74
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
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
77