Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2 Appbasics
2 Appbasics
Redes, Aplicaciones y Servicios en Internet (RASI) Departamento de Sistemas Telem aticos y Computaci on (GSyC)
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 Aplicaci on Android Creaci on y destrucci on de Aplicaciones y Actividades Recursos de las Aplicaciones Android Creaci on de Interfaces de Usuario: Views Creaci on de Interfaces de Usuario: Layouts Creaci on de Interfaces de Usuario: Creaci on de nuevas Views Creaci on de Interfaces de Usuario: Creaci on de Controles Compuestos Creaci on de Interfaces de Usuario: Men us Bibliograf a
Android: Fundamentos de la Creaci on de Aplicaciones El Maniesto de una Aplicaci on Android 3
GSyC - 2009
Contenidos
1 2 3 4 5 6 7 8 9
El Maniesto de una Aplicaci on Android Creaci on y destrucci on de Aplicaciones y Actividades Recursos de las Aplicaciones Android Creaci on de Interfaces de Usuario: Views Creaci on de Interfaces de Usuario: Layouts Creaci on de Interfaces de Usuario: Creaci on de nuevas Views Creaci on de Interfaces de Usuario: Creaci on de Controles Compuestos Creaci on de Interfaces de Usuario: Men us Bibliograf a
Android: Fundamentos de la Creaci on de Aplicaciones 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 aplicaci on Las otras aplicaciones necesitar an poner un uses-permission 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 ejecuci on para las Actividades y Servicios.
1 3 < i n s t r u m e n t a t i o n a n d r o i d : l a b e l=My T e s t a n d r o i d : n a m e= . M y T e s t C l a s s a n d r o i d : t a r g e t P a c k a g e=com . r a s i . aP ac ka ge > </ i n s t r u m e n t a t i o n >
GSyC - 2009
10
Contenidos
1 2 3 4 5 6 7 8 9
El Maniesto de una Aplicaci on Android Creaci on y destrucci on de Aplicaciones y Actividades Recursos de las Aplicaciones Android Creaci on de Interfaces de Usuario: Views Creaci on de Interfaces de Usuario: Layouts Creaci on de Interfaces de Usuario: Creaci on de nuevas Views Creaci on de Interfaces de Usuario: Creaci on de Controles Compuestos Creaci on de Interfaces de Usuario: Men us Bibliograf a
Android: Fundamentos de la Creaci on de Aplicaciones 11
Las time Aplicaciones Android no son iguales athat las aplicaciones en los sistemas manages the process of each application, and by extension of each Activity within it. operativos tradicionales: s o lo hay una en primer plano que normalmente While the run time handles the termination and management of an Activitys process, the Activitys state helps determine the priority of its parent application. The application priority, in turn, inuences ocupa toda la pantalla. the likelihood that the run time will terminate it and the Activities running within it. Las Aplicaciones est an formadas por Actividades (pantallas). Activity Stacks Al arrancar una nueva aplicaci on, pasa a primer plano situando una The state of each Activity is determined by its position on the Activity stack, a last-inrst-out collection of all the currently running Activities. When a new Activity starts, the current foreground screen is Actividad encima de la que hubiera, form andose as una Pila de moved to the top of the stack. If the user navigates back using the Back button, or the foreground Activity is closed, the next Activity on the stack moves up and becomes active. This process is illustrated in Actividades. Figure 3-7. El bot on Back ( ) cierra la Actividad en primer plano y recupera la de la As described previously in this chapter, an applications priority is inuenced by its highest-priority cima de la Pila (cerrando la uses aplicaci oto n determine en su the caso). Activity. The Android memory manager this stack priority of applications based
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 terminaci on en cualquier momento
En general, cada aplicaci on Android se ejecuta en un proceso que ejecuta una instancia de Dalvik. Android mata sin previo aviso los procesos que considera necesarios cuando lo considera necesario para mantener el sistema responsivo. El runtime de Android gestiona el proceso de cada aplicaci on, y por extensi on de cada Actividad que contenga.
13
Para usar una Actividad en una Aplicaci on, hay que registrarla en el Maniesto, incluyendo las Intenciones a las que responder a:
AndroidManifest.xml 1 <a c t i v i t y a n 3: d r o iCreating d : l a b e l= @Applications s t r i n g / app name Chapter 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 generally those interacting < a c t i o n applications a n d r o i d : n a m e= androi d . i n that t e n tare . ac t i o n . MAIN /> with the user at the time. The process is discussed section. 5 <prioritization category an droid:n am e= a n d rin o i the d . i next nten t . c a t e g o r y . LAUNCHER /> </ i n t e n t f i l t e r > 7 </ a c t i v i t y > 3
15
Creaci o n reclaim y destrucci on de Aplicaciones y Actividades in which processes are killed to resources is determined by the priority of the hosted 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 ordensupplied en que los procesos se van matando para liberar recursos lo determina las cy on a Service or Content Provider by a second application, the secondary applicahave at least as high a priority as the application it supports. prioridades de la aplicaciones que alojan.
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 activos: Los que est an interactuando con el 3 shows the priority tree used to determine the order of application termination.
Critical Priority
usuario). Hay muy pocos y se les mata s olo como u ltimo recurso. Procesos visibles: Visibles, pero no activos (p.ej, parcialmente tapados por otra actividad). Hay muy pocos y se les mata s olo en circunstancias extremas. Procesos de servicios arrancados: Procesamiento que debe continuar aunque no tenga interfaz visible. Se les mata s olo en circunstancias extremas.
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 as anteriores. Hay muchos. Se les mata cuando se necesitan recursos para el resto de procesos. Procesos vac os: Android mantiene en memoria las 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 Creaci on de Aplicaciones
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
its lifetime, each activity of an Android program can be in one of During Estados de una Actividad (II)
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 get notied when the state is about Activo (Running) : La Actividad est a encima de to la change pila, es through the onXX () method calls.
visible, tiene el foco (recibe la entrada del usuario). Cuando You override these methods in your Activity class, and Android will call otra Actividad pase a estar activa, esta pasar a a estar pausada. them at the appropriate time: Pausado (Paused):: La esthe visible pero no tiene onCreate(Bundle) ThisActividad is called when activity rst starts up. el You can use iteste to perform one-time initialization such as creating foco. Se alcanza estado cuando pasa a activa otra the user interface. onCreate( ) takes one parameter that is either Actividad transparente o que no ocupa toda pantalla. null or some state information previously saved by la 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 Creaci on de Aplicaciones 18
is
visible .
19
onCreate(Bundle):
Se invoca cuando la Actividad se arranca por primera vez. Se utiliza para tareas de inicializaci on a realizar una sola vez, como crear la interfaz de usuario de la Actividad. Su par ametro es null o informaci on de estado guardada previamente por onSaveInstanceState().
onStart():
Se invoca cuando la Actividad va a ser mostrada al usuario.
onResume():
Se invoca cuando la Actividad va a empezar a interactuar con el usuario.
GSyC - 2009
20
onStop():
Se invoca cuando la actividad va a dejar de ser visible y no se necesitar a durante un tiempo. Si hay escasez de recursos en el sistema, este m etodo podr a no llegar a ser invocado y la Actividad ser destruida directamente.
onRestart():
Se invoca cuando la Actividad va a salir del estado de parada para volver a estar activa.
onDestroy():
Se invoca cuando la Actividad va a ser destruida. Si hay escasez de recursos en el sistema, este m etodo podr a no llegar a ser invocado y la Actividad ser destruida directamente.
GSyC - 2009 Creaci on y destrucci on de Aplicaciones y Actividades Android: Fundamentos de la Creaci on de Aplicaciones 21
onSaveInstanceState(Bundle):
Se invoca para permitir a la actividad guardar su estado, p.ej: la posici on del cursor en una caja de texto. Normalmente no necesita ser redenido porque la implementaci on de la clase Activity ya guarda todo el estado de todos los componentes de la Interfaz de Usuario.
onRestoreInstanceState(Bundle):
Se invoca para recuperar el estado guardado por onSaveInstanceState(). Normalmente no necesita ser redenido porque la implementaci on de la clase Activity ya recupera todo el 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 Aplicaci on Android Creaci on y destrucci on de Aplicaciones y Actividades Recursos de las Aplicaciones Android Creaci on de Interfaces de Usuario: Views Creaci on de Interfaces de Usuario: Layouts Creaci on de Interfaces de Usuario: Creaci on de nuevas Views Creaci on de Interfaces de Usuario: Creaci on de Controles Compuestos Creaci on de Interfaces de Usuario: Men us Bibliograf a
Android: Fundamentos de la Creaci on de Aplicaciones 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 im agenes, incluyendo el icono de la aplicaci on Animaciones (carpeta anim) Men us (carpeta menu) Dise nos (carpeta layout) 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 > #f 0 0</ c o l o r>
Las dimensiones pueden tener distintas unidades: px, in, mm, pt, dp, sp
dp: Density-independent pixels (tambi en dip), pixels independientes de los dpi (puntos por pulgada) del dispositivo. Son un valor relativo a un dispositivo de 160dpi. sp: Scale-independent pixels, igual que los dp, pero tambi en escalados al tama no de font elegido por el usuario.
1 <dimen name= s i x t e e n s p >16 s p</ dimen>
Un chero XML contiene la denici on de uno o m as de estos elementos. Todos estos recursos se identican con el valor de su atributo name.
GSyC - 2009 Recursos de las Aplicaciones Android Android: Fundamentos de la Creaci on de Aplicaciones 25
Drawables
Para cheros de bitmaps o de im agenes estirables (.9.png) Tambi en puede denirse uno de estos recursos como un recuadro de color:
1 <d r a w a b l e name= s o l i d b l u e >#0000 f f</ d r a w a b l e>
(un chero XML puede contener uno o m as recuadros de 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 gr acos: rotaciones, fading, movimiento y estiramiento. Cada animaci on se dene en un chero XML Estos recursos se identican con su nombre de chero.
27
Men us
Existen tres tipos de men us: Men u de opciones, men u contextual y submen u Un men u de opciones o contextual se dene en un chero XML. Un submen u se dene dentro de otro men u. Un men u de opciones o contextual se identica con su nombre de chero. Un submen u se identica con el valor de su atributo id. Un elemento de un men u tambi en puede ser identicado con 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 tambi en puede ser identicado con el valor de su atributo id.
29
Estilos
Un estilo es uno o m as atributos que se aplican a un elemento. Un tema es uno o m as atributos que se aplican a todo lo que 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 tambi en puede ser referenciado de la manera adecuada seg un el tipo de recurso.
GSyC - 2009
30
Pueden ponerse varios sujos encadenados Dentro de esas subcarpetas se colocar an cheros especializados con el mismo nombre que el que tienen en la carpeta b asica (ej: strings.xml) La aplicaci on al usar un recurso elegir a de entre los disponibles aquel en el encajen m as sujos.
GSyC - 2009 Recursos de las Aplicaciones Android Android: Fundamentos de la Creaci on de Aplicaciones 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 />
Tambi en es posible acceder a recursos del tema actual (para mantener consistencia con el resto de aplicaciones), con ?:
1 a n d r o i d : t e x t C o l o r =? a n d r o i d : t e x t C o l o r
GSyC - 2009
36
Contenidos
1 2 3 4 5 6 7 8 9
El Maniesto de una Aplicaci on Android Creaci on y destrucci on de Aplicaciones y Actividades Recursos de las Aplicaciones Android Creaci on de Interfaces de Usuario: Views Creaci on de Interfaces de Usuario: Layouts Creaci on de Interfaces de Usuario: Creaci on de nuevas Views Creaci on de Interfaces de Usuario: Creaci on de Controles Compuestos Creaci on de Interfaces de Usuario: Men us Bibliograf a
Android: Fundamentos de la Creaci on de Aplicaciones Creaci on de Interfaces de Usuario: Views 37
GSyC - 2009
Terminolog a
Vistas (Views): Clase b asica que representa a un elemento b asico de IU en Android. En otros tipo de aplicaciones se utiliza el nombre de controles o widgets. Todos los componentes visuales en Android descienden de la clase View. Grupos de Vistas (ViewGroups): Extensiones de la clase View para crear controles compuestos que contienen m ultiples Views hijas. Dise nos (Layouts): Extensiones de la clase ViewGroup para gestionar la disposici on de sus Views hijas.
GSyC - 2009
38
La forma habitual es establecer el Layout al principio del m etodo onCreate. Una vez establecido, pueden obtenerse referencias a las Views contenidas en el Layout llamando al m etodo findViewById:
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 Aplicaci on Android Creaci on y destrucci on de Aplicaciones y Actividades Recursos de las Aplicaciones Android Creaci on de Interfaces de Usuario: Views Creaci on de Interfaces de Usuario: Layouts Creaci on de Interfaces de Usuario: Creaci on de nuevas Views Creaci on de Interfaces de Usuario: Creaci on de Controles Compuestos Creaci on de Interfaces de Usuario: Men us Bibliograf a
Android: Fundamentos de la Creaci on de Aplicaciones Creaci on de Interfaces de Usuario: Layouts 41
GSyC - 2009
FrameLayout: Coloca cada View en la esquina izquierda. Cada nueva View que se a nade tapa a la anterior. LinearLayout: Coloca cada View hija en 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 Aplicaci on Android Creaci on y destrucci on de Aplicaciones y Actividades Recursos de las Aplicaciones Android Creaci on de Interfaces de Usuario: Views Creaci on de Interfaces de Usuario: Layouts Creaci on de Interfaces de Usuario: Creaci on de nuevas Views Creaci on de Interfaces de Usuario: Creaci on de Controles Compuestos Creaci on de Interfaces de Usuario: Men us Bibliograf a
Android: Fundamentos de la Creaci on de Aplicaciones 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 c omo se dispondr an los elementos de la lista usando la nueva View:
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 Aplicaci on Android Creaci on y destrucci on de Aplicaciones y Actividades Recursos de las Aplicaciones Android Creaci on de Interfaces de Usuario: Views Creaci on de Interfaces de Usuario: Layouts Creaci on de Interfaces de Usuario: Creaci on de nuevas Views Creaci on de Interfaces de Usuario: Creaci on de Controles Compuestos Creaci on de Interfaces de Usuario: Men us Bibliograf a
Android: Fundamentos de la Creaci on de Aplicaciones 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 Aplicaci on Android Creaci on y destrucci on de Aplicaciones y Actividades Recursos de las Aplicaciones Android Creaci on de Interfaces de Usuario: Views Creaci on de Interfaces de Usuario: Layouts Creaci on de Interfaces de Usuario: Creaci on de nuevas Views Creaci on de Interfaces de Usuario: Creaci on de Controles Compuestos Creaci on de Interfaces de Usuario: Men us Bibliograf a
Android: Fundamentos de la Creaci on de Aplicaciones 56
GSyC - 2009
Tipos de Men u
Men u de Opciones: El que aparece cuando se pulsa el bot on Men u o M del terminal. Consta de un men u de iconos y, en su caso, de un men u expandido:
Men u de Iconos: Hasta 6 elementos con un icono y/o texto. En cada elemento puede ir un submen u. Si se denen m as de 6 elementos, aparece un elemento llamado M as que mostrar a el men u expandido. Men u Expandido: Lista desplazable de los elementos del men u de opciones que no entraban dentro del men u de iconos.
Men u Contextual: Men u que se despliega al pulsar el bot on central del terminal, o al tocar prolongadamente la pantalla t actil. Submen u: Men u otante que se despliega al seleccionar una entrada denida como submen u en alguno de los men us anteriores. Dentro de un submen u NO puede haber otro.
GSyC - 2009 Creaci on de Interfaces de Usuario: Men us Android: Fundamentos de la Creaci on de Aplicaciones 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 u cada vez que se muestra redeniendo el m etodo onPrepareOptionsMenu:
@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
Creaci on de un Submen u
A trav es de addSubMenu, que admite los mismos par ametros que add para a nadir elementos normales. Los elementos de dentro del submen u se gestionan igual que los del men u de opciones. Adicionalmente se puede a nadir un icono para el men u de opciones y para la cabecera del submen u cuando se muestre.
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
Men us Contextuales
Puede crearse un men u contextual para una Actividad redeniendo su m etodo 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 u contextual se manejan de forma similar a las del men u de opciones, redeniendo el m etodo onContextItemSelected de la 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
A nadimos constantes para denir los identicadores de los 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 e oculta hasta que se elija la opci on de a nadir 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 Aplicaci on Android Creaci on y destrucci on de Aplicaciones y Actividades Recursos de las Aplicaciones Android Creaci on de Interfaces de Usuario: Views Creaci on de Interfaces de Usuario: Layouts Creaci on de Interfaces de Usuario: Creaci on de nuevas Views Creaci on de Interfaces de Usuario: Creaci on de Controles Compuestos Creaci on de Interfaces de Usuario: Men us Bibliograf a
Android: Fundamentos de la Creaci on de Aplicaciones 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. Documentaci on del Android SDK: en la carpeta docs del directorio del SDK, o en http://developer.android.com/guide/index.html Documentaci on sobre Android (tutoriales, v deos,...): http://developer.android.com
GSyC - 2009
77