Beruflich Dokumente
Kultur Dokumente
Utilizar un entorno de desarrollo nos facilita mucho la creacin de programas. Esto es especialmente importante en Android dado que tendremos que utilizar gran variedad de ficheros. Gracias al plug-in Android que hemos instalado en el entorno de desarrollo Eclipse, la creacin y gestin de proyectos se realizar de forma muy rpida, acelerando los ciclos de desarrollo. Ejercicio paso a paso: Crear un primer proyecto en Android ara crear un primer proyecto Android sigue los siguientes pasos! 1. "elecciona File > New > Project... "i el lug-in de Android se ha
instalado correctamente, el dilogo que aparece de#e tener un directorio llamado Android que de#e contener Android Project. 2. "elecciona Android Project y pulsa Next.
3.
A continuacin vemos una descripcin para cada campo! Application Name:Es el nom#re de la aplicacin que aparecer en el dispositivo Android. %anto en la #arra superior cuando est& en e'ecucin, como en el icono que se instalar en el men( de programas. Project Name:Es el nom#re del proyecto. "e crear una carpeta con el mismo nom#re que contendr los ficheros del proyecto. Package Name:)ndicamos el paquete con el espacio de nom#res utilizado por nuestra aplicacin. *ay que usar las reglas de los espacios de nom#re en el lengua'e de programacin +ava. ,as clases que creemos estarn dentro de &l. Esto tam#i&n esta#lece el nom#re del paquete donde se almacenar la aplicacin generada.
Nota sobre Java: El nombre del paquete debe ser nico en todos los paquetes instalados en el sistema; por ello es muy importante utilizar para tus aplicaciones un dominio de estilo estndar en los paquetes. El espacio de nombres "com.example" est reservado para la documentacin de ejemplos. Cuando desarrollas tu propia aplicacin, debes utilizar un espacio de nombres que sea apropiado. Minimum requiered S ! Este valor especifica el m-nimo nivel del A ) que requiere tu aplicacin. or lo tanto, la aplicacin no podr ser instalada en dispositivos con una versin inferior. rocura escoger valores peque.os para que tu aplicacin pueda instalarse en la mayor-a de dispositivos. Un valor adecuado puede ser nivel de A ) / 0v1.23, dado
que cu#rir-a ms del 44,56 de los dispositivos. 7 nivel de A ) 5 0v1.13, que cu#rir-a ms del 45,86 de los dispositivos. Escoger valores peque.os para este parmetro tiene un inconveniente. 9o podremos utilizar ninguna de las me'oras que aparezcan en los siguientes niveles de A ). or e'emplo, si queremos que nuestra aplicacin se configure de forma diferente cuando el usuario seleccione modo automvil tendremos que indicar en este campo la versin 1.1, dado que este modo no aparece hasta esta versin. Target SDK!)ndica la versin ms alta de Android con la que se han puesto a prue#a la aplicacin. :uando salgan nuevas versiones del ";<, tendrs que pro#ar la aplicacin con estas versiones y actualizar el valor. Compile it!! Es la versin de la plataforma con la que compila la aplicacin. "e recomienda indicar la versin ms reciente que haya aparecido. ,as nuevas versiones no solo a.aden funcionalidades al A ), tam#i&n a.aden me'oras en el desarrollo. or e'emplo, en algunas versiones se asigna un tema a la aplicacin, o apartir de la versin =.> se verifica que un acceso a un servidor ?e# se haga en un hilo au@iliar. Utilizar un Target SDK alto no est re.ido con usar un "inimum re#uiered SDKpeque.o. T!eme!Estilo que se utiliza en la aplicacin. Un tema define los colores, fuentes y otros aspectos visuales de nuestra aplicacin. "er estudiado en el siguiente cap-tulo. ". ulsa Next para pasar a la siguiente pantalla. uedes de'ar los valores por defecto. ,os dos primeros checA#o@ te permiten saltarte las pantallas que veremos a continuacin. ,os tres siguientes permiten crear una li#rer-a, indicar donde se almacena el proyecto y asignar una serie de parmetros de configuracin. #. ulsa Next para pasar a la siguiente pantalla. Aqu- podrs configurar el icono de la aplicacin. $esulta sencillo de utilizar. Bs adelante se e@plicarn ms detalles so#re el dise.o de iconos.
$.
ulsa Next para pasar a la siguiente pantalla. "i hemos marcado que
queremos una actividad inicial qu- podremos configurar su tipo. :omo veremos ms adelante una actividad es cada una de las pantallas en las que dividimos una aplicacin. ;e'a el valor por defecto! ClanAActivity. %. ulsa Next para pasar a la (ltima pantalla. Aqu- podemos indicar el nom#re de la actividad y el ,ayout asociado a esta actividad. %am#i&n podremos indicar el tipo de navegacin. &. '. ulsa Fini$! para terminar la creacin del proyecto. ;e#er-as tener visi#le el e@plorador de paquetes a la izquierda. A#re
el fichero HolaMundo.java0situado en%ola"undo > $rc > com.example.%ola"undo3. ;e#e tener este aspecto! package com.example.holamundo;
@Override public void onCreate Bundle saved!nstance"tate# { super.onCreate saved!nstance"tate#; setContent$iew %.layout.acti&ity'main#;
& @Override public boolean onCreateOptionsMenu Menu menu# { // Inflate the menu; this adds items to the action 'etMenu!n(later #.in(late %.menu.acti&ity'main) menu#; return true; & & :omenzamos declarando el paquete con el espacio de nom#res utilizado por nuestra aplicacin. A continuacin indicamos los DimportE con los paquetes que contienen las clases que vamos a utilizar. Esto nos evitar tener que poner delante de cada clase su espacio de nom#res. 7#serva que la clase MainActivity e@tiende de Activity. Una acti&idad es una entidad de aplicacin que se utiliza para representar cada una de las pantallas de nuestra aplicacin. Es decir, el usuario interact(a con solo una de estas actividades y va navegando entre ellas. El m&todo onCreate # se llamar por el sistema cuando comience su e'ecucin. Es donde se de#e realizar la inicializacin y la configuracin de la interfaz del usuario. ,as actividades van a ser las encargadas de interactuar con el usuario. Antes de este m&todo se ha utilizado la anotacin @Override 0so#re escri#ir3. Esto indica al compilador que el m&todo ya e@iste en la clase padre y queremos reemplazarlos. Es opcional, aunque conviene incluirlo para evitar errores. ,o primero que hay que hacer al so#re escri#ir un m&todo suele ser llamar al m&todo de la clase de la que hemos heredado. Esto se hace con la pala#ra reservada super. El m&todo termina indicando que la actividad va a visualizar en una determinada vista. Esta vista est definida en los recursos. ,o veremos un poco ms adelante. El siguiente m&todo que so#reescri#imos es onCreateOptionsMenu. "er llamado por el sistema cuando se requiera la creacin del men( de la actividad. En el cap-tulo = se e@plica la creacin de men(s.
Ejecucin en el emulador
Ejercicio paso a paso: (jecuci)n en el emulador
1. 2.
"elecciona *un > *un. 0:trl-F223. Escoge Android Application. Eclipse crear automticamente una
nueva configuracin de e'ecucin para tu proyecto y lanzar el emulador. 0,a inicializacin del emulador puede ser algo lenta, por esta razn es me'or no cerrar el emulador3 Una vez que el emulador est& cargado, de#es ver algo as-!
Ejercicio paso a paso: (jecuci)n en un terminal real 1. A#re &ndroid '() and &*( +ana,er y aseg(rate que est instalado el paquete -'. (river. En caso contrario instlalo.
osi#lemente este driver gen&rico no sea adecuado para tu terminal y tengas que utilizar el del fa#ricante. "i no dispones de el, puedes #uscarlo en! http*++developer.android.com+sd,+oem-us..html 2. En el terminal accede al men( Aju$te$ > +pcione$ de de$arrollador y aseg(rate que la opcin Depuraci)n de ,S- est activada.
3. ".
:onecta el ca#le U"C. "e indicar que hay un nuevo !ardware y te pedir que le indiques el
N)*+: En ?indoGs si indicas un controlador incorrecto no funcionar. Adems la pr@ima vez que conectes el ca#le no te pedir la instalacin del controlador. ara desinstalar el controlador sigue los siguientes pasos! .. 0. 8. A$egurate de !a/er de$in$talado el controlador incorrecto. Accede al regi$tro del $i$tema 12nicio > ejecutar > *eg(dit3. 9uel&e al pa$o 8 del ejercicico.
controlador.
$rc!
gen! :arpeta que contiene el cdigo generado de forma automtica por el ";<.
9unca hay que modificar de forma manual estos ficheros. ;entro encontraremos:
*.ja&a! ;efine una clase que asocia los recursos de la aplicacin con
identificadores. ;e esta forma los recursos podrn ser accedidos desde +ava.
Android x.x! :digo +A$, el A ) de Android seg(n la versin seleccionada. Android Dependencie$! ,i#rer-as asociadas al proyecto. a$$et$! :arpeta que puede contener una serie ar#itraria de ficheros o carpetas
que podrn ser utilizados por la aplicacin 0ficheros de datos, fuentes,H3. A diferencia de la carpeta re$; nunca se modifica el contenido de los ficheros de esta carpeta ni se les asociar un identificador.
li/$! :digo +A$ con li#rer-as que quieras usar en tu proyecto. "e ha a.adido
una li#rer-a android-supportcuyo o#'etivo es a.adir nuevas funcionalidades que no aparec-an en el nivel de A ) 8 0recuerda que es el nivel de A ) m-nimo que hemos indicado3 y que aparecieron en versiones ms recientes del ";<.
re$! :arpeta que contiene los recursos usados por la aplicacin. :omo
veremos en el siguiente cap-tulo las su#carpetas pueden tener un sufi'o si queremos que el recurso solo se carge al cumplirse una condicin. or e'emplo Ihdpisignifica que solo ha de cargar los recursos contenidos en esta carpeta cuando el dispositivo donde se instala la aplicacin tiene una densidad grfica alta 0J25>dpi3K -v22significa que el recurso solo ha de cargarse en un dispositivo con nivel de A ) 22 0v=.>3.
layout! :ontiene ficheros LB, con vistas de la aplicacin. ,as vistas nos
permitirn configurar las diferentes pantallas que compondrn la interfaz de usuario de la aplicacin. "e utiliza un formato similar al *%B, usado para dise.ar pginas ?e#. "ern tratadas en el siguiente cap-tulo.
&alue$! %am#i&n utilizaremos ficheros LB, para indicar valores del tipo
string, color o estilo. ;e esta manera podremos cam#iar los valores sin necesidad de ir al cdigo fuente. or e'emplo, nos permitir-a traducir una aplicacin a otro idioma.
animator! :ontiene ficheros LB, con animaciones de propiedades. xml! 7tros ficheros LB, requeridos por la aplicacin. raw! Ficheros adicionales que no se encuentran en formato LB,. Android"ani:e$t.xml! Este fichero descri#e la aplicacin Android. En &l se
indican las acti&idade$,intencione$, $er&icio$ y pro&eedore$ de contenido de la aplicacin. %am#i&n se declaran los permisos que requerir la aplicacin. "e indica la versin m-nima de Android para poder e'ecutarla, el paquete +ava, la versin de la aplicacin, etc.
$rc!
gen! :arpeta que contiene el cdigo generado de forma automtica por el ";<.
9unca hay que modificar de forma manual estos ficheros. ;entro encontraremos:
*.ja&a! ;efine una clase que asocia los recursos de la aplicacin con
identificadores. ;e esta forma los recursos podrn ser accedidos desde +ava.
Android x.x! :digo +A$, el A ) de Android seg(n la versin seleccionada. Android Dependencie$! ,i#rer-as asociadas al proyecto. a$$et$! :arpeta que puede contener una serie ar#itraria de ficheros o carpetas
que podrn ser utilizados por la aplicacin 0ficheros de datos, fuentes,H3. A diferencia de la carpeta re$; nunca se modifica el contenido de los ficheros de esta carpeta ni se les asociar un identificador.
li/$! :digo +A$ con li#rer-as que quieras usar en tu proyecto. "e ha a.adido
una li#rer-a android-supportcuyo o#'etivo es a.adir nuevas funcionalidades que no aparec-an en el nivel de A ) 8 0recuerda que es el nivel de A ) m-nimo que hemos indicado3 y que aparecieron en versiones ms recientes del ";<.
re$! :arpeta que contiene los recursos usados por la aplicacin. :omo
veremos en el siguiente cap-tulo las su#carpetas pueden tener un sufi'o si queremos que el recurso solo se carge al cumplirse una condicin. or e'emplo Ihdpisignifica que solo ha de cargar los recursos contenidos en esta carpeta cuando el dispositivo donde se instala la aplicacin tiene una densidad grfica alta 0J25>dpi3K -v22significa que el recurso solo ha de cargarse en un dispositivo con nivel de A ) 22 0v=.>3.
layout! :ontiene ficheros LB, con vistas de la aplicacin. ,as vistas nos
permitirn configurar las diferentes pantallas que compondrn la interfaz de usuario de la aplicacin. "e utiliza un formato similar al *%B, usado para dise.ar pginas ?e#. "ern tratadas en el siguiente cap-tulo.
&alue$! %am#i&n utilizaremos ficheros LB, para indicar valores del tipo
string, color o estilo. ;e esta manera podremos cam#iar los valores sin necesidad de ir al cdigo fuente. or e'emplo, nos permitir-a traducir una aplicacin a otro idioma.
animator! :ontiene ficheros LB, con animaciones de propiedades. xml! 7tros ficheros LB, requeridos por la aplicacin. raw! Ficheros adicionales que no se encuentran en formato LB,. Android"ani:e$t.xml! Este fichero descri#e la aplicacin Android. En &l se
indican las acti&idade$,intencione$, $er&icio$ y pro&eedore$ de contenido de la aplicacin. %am#i&n se declaran los permisos que requerir la aplicacin. "e indica la versin m-nima de Android para poder e'ecutarla, el paquete +ava, la versin de la aplicacin, etc.
del mismo terminal y servicios remotos, que pueden ser utilizados desde otros terminales. ,os servicios son estudiados en el mdulo 5. Intencin (Intent) Una intencin representa la voluntad de realizar alguna accinK como realizar una llamada de tel&fono, visualizar una pgina Ge#. "e utiliza cada vez que queramos! lanzar una actividad lanzar un servicio lanzar unanuncio de tipo #roadcast :omunicarnos con un servicio ,os componentes lanzados pueden ser internos o e@ternos a nuestra aplicacin. %am#i&n utilizaremos lasintenciones para el intercam#io de informacin entre estos componentes. En muchas ocasiones una intencin no ser inicializada por la aplicacin, si no por el sistema, por e'emplo, cuando pedimos visualizar una pgina Ge#. En otras ocasiones ser necesario que la aplicacin inicialice su propia intencin. ara ello se crear un o#'eto de la clase )ntent. Receptor de anuncios (Broadcast receiver) Un receptor de anuncios reci#e y reacciona ante anuncios de tipo #roadcast. E@isten muchos originados por el sistemaK como por e'emplo Cater-a #a'a, llamada entrante,... Aunque, las aplicaciones tam#i&n puede lanzar unanuncio #roadcast. 9o tienen interfaz de usuario, aunque pueden iniciar una actividad para atender a un anuncio. Proveedores de Contenido (Content Provider) ,a comparticin de informacin entre tel&fonos mviles resulta un tema vital. Android define un mecanismo estndar para que las aplicaciones puedan compartir datos sin necesidad de comprometer la seguridad del sistema de ficheros. :on este mecanismo podremos acceder a datos de otras aplicaciones, como la lista de contactos, o proporcionar datos a otras aplicaciones. ,os :ontent rovider son estudiados en el mdulo 4.
ocumentacin , depurar
Aunque en este li#ro vas a aprender mucho, resultar-a imposi#le tocar todos los aspectos de Android y a un elevado nivel de profundidad. or lo tanto, resulta imprescindi#le que dispongas de fuentes de informacin para consultar los aspectos que vayas necesitando. En este apartado te proponemos dos alternativas! el acceso a documentacin so#re Android y el estudio de e'emplos. Donde encontrar documentacin uedes encontrarla una completa documentacin del ";< de Android, incluyendo referencia de las clases, conceptos clave y otro tipo de recursos en! 0siempre que hayas instalado la documentacin on-line3
\android-sdk-windows\docs\inde !html
Esta documentacin tam#i&n est disponi#le en l-nea a trav&s de )nternet! http*++developer.android.com+ Buchos de los recursos utilizados en este li#ro puedes encontrarlos en! http*++www.androidcurso.com+ uedes encontrar informacin referente a este li#ro en la ?e# de la editorial! http*++www.marcom.o.com+0l-'ran-li.ro-de-android3is.n45667895:5;8<.html ara resolver dudas puntuales so#re programacin te recomendamos la ?e# de preguntas y respuestas! http*++stac,over(low.com+ La aplicacin ApiDemos 7tra opcin muy interesante para aprender nuevos aspectos de programacin consiste en estudiar e'emplos. :on este propsito se ha incluido en el ";< de Android una aplicacin, Api;emos. Est formada por cientos de e'emplos, donde no solo podrs ver las funcionalidades disponi#les en el A ) de Android, sino que adems podrs estudiar su cdigo.
ara crear un proyecto con esta aplicacin sigue los siguientes pasos! "elecciona File > New > ProjectD e indica Android Sample Project. ulsa Next y aparecer un cuadro de dilogo similar al siguiente!
*as de seleccionar un nivel de A ) para crear el proyecto. A continuacin selecciona uno de los proyectos de e'emplo: en nuestro caso ApiDemo$. ulsa Fini$! para crear el proyecto. "i no ha ha#ido ning(n error ya puedes e'ecutar ApiDemo$. Ners como los diferentes e'emplos se organizan por carpetas. En el nivel superior tenemos! +ccessibi(it,! Aspectos de accesi#ilidad, como tracA#all, touch o te@to a voz. +nimation! Gran variedad de efectos y animaciones. +pp! %ra#a'ando a nivel de aplicacin con Acti&ity, Alarm, Dialog, Ser&ice; etc. Content! ;escri#e cmo leer datos desde ficheros, recursos y archivos LB,. -rap.ics! Gran cantidad de e'emplos grficos tanto en 1; como en =;. Media! $eproduccin de audio y v-deo con las clases "ediaPlayer y 9ideo9iew. N/C! E'emplos de uso de Near Field Communication. )S! "ervicios del sistema operativo. )ncluye sensores, vi#rador o en&io de S"S. 0re1erence! Narios e'emplos de uso de preferencias. *e2t! ;iferentes e'emplos de manipulacin y visualizacin de te@to. 3ie4s! Android utiliza como elemento #sico de representacin la clase 9iew 0vista3. %enemos a nuestra disposicin gran cantidad de descendientes de esta clase para representar una interfaz grfica
0#otones, ca'as de te@to, entradas...3. Nisualiza estos e'emplos para mostrar las diferentes posi#ilidades. Una vez seleccionado un e'emplo, si quieres estudiar su cdigo, #(scalo en la carpeta $rc. ara organizar me'or el cdigo se han creado diferentes espacios de nom#re de paquetes.
N)*+: Este mismo problema tambi4n te ocurrir cuando ten,as instalado el entorno de desarrollo 5Eclipse6 en dos 7C. Cada entorno de desarrollo tiene un
certi/icado di,ital di/erente. Cuando trates de instalar una aplicacin en tu dispositivo /3sico, te aparecer un error, si la aplicacin ya 1a sido instalada con el otro entorno.
Depurar rogramacin y errores de cdigo es un #inomio insepara#le. or lo tanto, resulta fundamental sacar el m@imo provechos a las herramientas de depuracin. Depurar con Eclipse El plug<in de Android para Eclipse tiene una e@celente integracin con el depurador de Eclipse. )ntroduce un error en tu cdigo modificando el cdigo fuente de MainActivity para que en m&todo onCreate tenga este este cdigo! "Override public void onCreate Bundle saved!nstance"tate# { super.onCreate saved!nstance"tate#; O.ject o = null; o.to"trin' #; setContent$iew %.layout.acti&ity'main#; & Este cam#io introduce un #ull$ointer% ception en tu cdigo. "i ahora e'ecutas tu aplicacin, te aparecer esto!
ulsa Force Clo$e para finalizar la aplicacin y cerrar la ventana del emulador. ara averiguar ms so#re el error, inserta un punto de ruptura 0#reaApoint3 en el cdigo fuente en la l-nea O&'ect o ( null; 0el #reaApoint se introduce haciendo do#le clic en la #arra de la izquierda3. Entonces selecciona *un E De/ug %i$tory E %ola"undopara e'ecutarlo en modo de#ug. %u aplicacin se reiniciar en el emulador, pero esta vez quedar suspendida cuando alcance el punto de ruptura que se ha
introducido. Entonces puedes recorrer el cdigo en modo De/ug, igual que se har-a en cualquier otro entorno de programacin. Depurar con mensajes Log El sistema Android utiliza el fichero ?ogCat para registrar todos los pro#lemas y eventos principales que ocurren en el sistema. Ante cualquier error resulta muy interesante consultarlo para tratar de encontrar su origen. ,a clase ?og proporciona un mecanismo para introducir mensa'es desde nuestro cdigo en este fichero. uede ser muy (til para depurar nuestros programas o para verificar el funcionamiento del cdigo. ;isponemos de varios m&todos para generar distintos tipos de mensa'es! )o*!e+,! Errors )o*!w+,- ?arnings )o*!i+,- )nformation )o*!d+,- ;e#ugging )o*!v+,- Ner#ose Ejercicio paso a paso: Depurar con men$aje ?og$ 1. Bodifica la clase BainActivityintroduciendo la l-nea que aparece en @Override public void onCreate Bundle saved!nstance"tate# { Log.d(" ola!undo"""#ntramos en on$reate"%& super.onCreate saved!nstance"tate#; O.ject o = null; o.to"trin' #; setContent$iew %.layout.acti&ity'main#; & negrita!
Nota sobre Java: 7ara poder utilizar la clase Log 1as de importar un nuevo paquete, para ello a8ade al principio import android.util.?ogF 9tra alternativa es pulsar Ctr(5S.i1t5), para que se a8adan automticamente los paquetes que /altan. En este caso el sistema encuentra dos paquetes con la clase :o,, por lo que te pre,untar. 2. E'ecuta la aplicacin. Aparecer un error.
ara ver el fichero de ?og desde Eclipse accede al men( S!ow 9iew E +t!er$D E Android E ?ogCat.
indow E
:omo se muestra en la segunda l-nea de la captura anterior podemos compro#ar que se pude entrar dentro deOnCreate! ;os l-neas ms a#a'o se produ'o una e@cepcin. ,a informacin mostrada suele ser e@cesiva. %e recomendamos que #usques las pala#ras D:aused #yE para ver el tipo de e@cepcin y la primera referencia a un paquete escrito por nosotros Dcom.e@ample.holamundoE. En este e'emplo, las dos l-neas clave son!
3.
http*++www.androidcurso.com+index.php+tutoriales-java-esencial
http*++www.androidcurso.com+index.php+tutoriales-android
http*++www.androidcurso.com+index.php+video-tutoriales http*++www.androidcurso.com+index.php+pre'untas-de-repaso-y-re(lexion
http*++www.androidcurso.com+index.php+video-tutoriales+88-java
ocumentacin , depurar
Aunque en este li#ro vas a aprender mucho, resultar-a imposi#le tocar todos los aspectos de Android y a un elevado nivel de profundidad. or lo tanto, resulta imprescindi#le que dispongas de fuentes de informacin para consultar los aspectos que vayas necesitando. En este apartado te proponemos dos alternativas! el acceso a documentacin so#re Android y el estudio de e'emplos. Donde encontrar documentacin uedes encontrarla una completa documentacin del ";< de Android, incluyendo referencia de las clases, conceptos clave y otro tipo de recursos en! 0siempre que hayas instalado la documentacin on-line3
\android-sdk-windows\docs\inde !html
Esta documentacin tam#i&n est disponi#le en l-nea a trav&s de )nternet! http*++developer.android.com+ Buchos de los recursos utilizados en este li#ro puedes encontrarlos en! http*++www.androidcurso.com+ uedes encontrar informacin referente a este li#ro en la ?e# de la editorial! http*++www.marcom.o.com+0l-'ran-li.ro-de-android3is.n45667895:5;8<.html ara resolver dudas puntuales so#re programacin te recomendamos la ?e# de preguntas y respuestas! http*++stac,over(low.com+ La aplicacin ApiDemos 7tra opcin muy interesante para aprender nuevos aspectos de programacin consiste en estudiar e'emplos. :on este propsito se ha incluido en el ";< de Android una aplicacin, Api;emos. Est formada por cientos de e'emplos, donde no solo podrs ver las funcionalidades disponi#les en el A ) de Android, sino que adems podrs estudiar su cdigo. ara crear un proyecto con esta aplicacin sigue los siguientes pasos! "elecciona File > New > ProjectD e indica Android Sample Project. ulsa Next y aparecer un cuadro de dilogo similar al siguiente!
*as de seleccionar un nivel de A ) para crear el proyecto. A continuacin selecciona uno de los proyectos de e'emplo: en nuestro caso ApiDemo$. ulsa Fini$! para crear el proyecto. "i no ha ha#ido ning(n error ya puedes e'ecutar ApiDemo$. Ners como los diferentes e'emplos se organizan por carpetas. En el nivel superior tenemos! +ccessibi(it,! Aspectos de accesi#ilidad, como tracA#all, touch o te@to a voz. +nimation! Gran variedad de efectos y animaciones. +pp! %ra#a'ando a nivel de aplicacin con Acti&ity, Alarm, Dialog, Ser&ice; etc. Content! ;escri#e cmo leer datos desde ficheros, recursos y archivos LB,. -rap.ics! Gran cantidad de e'emplos grficos tanto en 1; como en =;. Media! $eproduccin de audio y v-deo con las clases "ediaPlayer y 9ideo9iew. N/C! E'emplos de uso de Near Field Communication. )S! "ervicios del sistema operativo. )ncluye sensores, vi#rador o en&io de S"S. 0re1erence! Narios e'emplos de uso de preferencias. *e2t! ;iferentes e'emplos de manipulacin y visualizacin de te@to. 3ie4s! Android utiliza como elemento #sico de representacin la clase 9iew 0vista3. %enemos a nuestra disposicin gran cantidad de descendientes de esta clase para representar una interfaz grfica 0#otones, ca'as de te@to, entradas...3. Nisualiza estos e'emplos para mostrar las diferentes posi#ilidades.
Una vez seleccionado un e'emplo, si quieres estudiar su cdigo, #(scalo en la carpeta $rc. ara organizar me'or el cdigo se han creado diferentes espacios de nom#re de paquetes.
N)*+: Este mismo problema tambi4n te ocurrir cuando ten,as instalado el entorno de desarrollo 5Eclipse6 en dos 7C. Cada entorno de desarrollo tiene un certi/icado di,ital di/erente. Cuando trates de instalar una aplicacin en tu
dispositivo /3sico, te aparecer un error, si la aplicacin ya 1a sido instalada con el otro entorno.
Depurar rogramacin y errores de cdigo es un #inomio insepara#le. or lo tanto, resulta fundamental sacar el m@imo provechos a las herramientas de depuracin. Depurar con Eclipse El plug<in de Android para Eclipse tiene una e@celente integracin con el depurador de Eclipse. )ntroduce un error en tu cdigo modificando el cdigo fuente de MainActivity para que en m&todo onCreate tenga este este cdigo! "Override public void onCreate Bundle saved!nstance"tate# { super.onCreate saved!nstance"tate#; O.ject o = null; o.to"trin' #; setContent$iew %.layout.acti&ity'main#; & Este cam#io introduce un #ull$ointer% ception en tu cdigo. "i ahora e'ecutas tu aplicacin, te aparecer esto!
ulsa Force Clo$e para finalizar la aplicacin y cerrar la ventana del emulador. ara averiguar ms so#re el error, inserta un punto de ruptura 0#reaApoint3 en el cdigo fuente en la l-nea O&'ect o ( null; 0el #reaApoint se introduce haciendo do#le clic en la #arra de la izquierda3. Entonces selecciona *un E De/ug %i$tory E %ola"undopara e'ecutarlo en modo de#ug. %u aplicacin se reiniciar en el emulador, pero esta vez quedar suspendida cuando alcance el punto de ruptura que se ha
introducido. Entonces puedes recorrer el cdigo en modo De/ug, igual que se har-a en cualquier otro entorno de programacin. Depurar con mensajes Log El sistema Android utiliza el fichero ?ogCat para registrar todos los pro#lemas y eventos principales que ocurren en el sistema. Ante cualquier error resulta muy interesante consultarlo para tratar de encontrar su origen. ,a clase ?og proporciona un mecanismo para introducir mensa'es desde nuestro cdigo en este fichero. uede ser muy (til para depurar nuestros programas o para verificar el funcionamiento del cdigo. ;isponemos de varios m&todos para generar distintos tipos de mensa'es! )o*!e+,! Errors )o*!w+,- ?arnings )o*!i+,- )nformation )o*!d+,- ;e#ugging )o*!v+,- Ner#ose
Ejercicio paso a paso: Depurar con men$aje ?og$ 1. Bodifica la clase BainActivityintroduciendo la l-nea que aparece en @Override public void onCreate Bundle saved!nstance"tate# { Log.d(" ola!undo"""#ntramos en on$reate"%& super.onCreate saved!nstance"tate#; O.ject o = null; o.to"trin' #; setContent$iew %.layout.acti&ity'main#; & negrita!
Nota sobre Java: 7ara poder utilizar la clase Log 1as de importar un nuevo paquete, para ello a8ade al principio import android.util.?ogF 9tra alternativa es pulsar Ctr(5S.i1t5), para que se a8adan automticamente los paquetes que /altan. En este
caso el sistema encuentra dos paquetes con la clase :o,, por lo que te pre,untar. 2. E'ecuta la aplicacin. Aparecer un error. ara ver el fichero de ?og desde Eclipse accede al men( S!ow 9iew E +t!er$D E Android E ?ogCat. indow E
:omo se muestra en la segunda l-nea de la captura anterior podemos compro#ar que se pude entrar dentro deOnCreate! ;os l-neas ms a#a'o se produ'o una e@cepcin. ,a informacin mostrada suele ser e@cesiva. %e recomendamos que #usques las pala#ras D:aused #yE para ver el tipo de e@cepcin y la primera referencia a un paquete escrito por nosotros Dcom.e@ample.holamundoE. En este e'emplo, las dos l-neas clave son!
3.
Esta parte del curso es opcional! se "a a#adido para los $ue dispongan de pocos conocimientos de %ava
Aunque e@isten otras alternativas, la gran mayor-a de aplicaciones Android se desarrollan utilizando el lengua'e +ava. ,a eleccin de este lengua'e no ha sido ar#itraria, como veremos en el siguiente apartado, +ava tiene una serie de caracter-sticas que lo hacen especialmente interesante para el sistema Android. or lo tanto, disponer de conocimientos so#re este lengua'e de programacin es importante para un desarrollo adecuado del curso. "i nunca has tra#a'ado con +ava, no te preocupes, +ava es un lengua'e sencillo y para seguir el curso no va a ser imprescindi#le un dominio del mismo 0con entender el cdigo ser suficiente3. Eso s-, vas a necesitar nociones de programacin, especialmente si conoces la sinta@is de lengua'es como : o :OO, o si ya has tra#a'ado con alg(n lengua'e orientado a o#'eto. "i no tienes conocimientos de programacin tendrs muchos pro#lemas en seguir el curso. ara aquellos alumnos que nunca han tra#a'ado con +ava, o lo tienen muy olvidado, hemos preparado una primera unidad para introducir los aspectos de +ava ms importantes. "i ya conoces este lengua'e de programacin, puedes pasar directamente a la siguiente unidad. Aunque tam#i&n te puede venir #ien un vistazo al documento ;e/erencia de <ava. ;onde hemos resumido de forma esquemtica las construcciones y caracter-sticas ms importantes de +ava. "e recomienda para la ampliacin de los conocimientos la lectura del li#ro P ensando en +avaP
muy similar a como lo 1ar3amos en C o C>>. En la si,uiente tabla se muestra una tabla con los tipos simples disponibles en <ava.
ara crear una nueva clase, lo primero que tienes que hacer es crear un fichero que ha de llamarse e@actamente igual que la clase y con e@tensin !'ava. $ecuerda, siempre un fichero por clase. Al principio de este fichero se suele indicar es el paquete al que pertenecer esta clase. or e'emplo!
package or*!upv!cursoandroid!unidad.;
:mo las clases son agrupadas en paquetes ser e@plicado ms tarde. ;e momento no es imprescindi#le para tra#a'ar con los primeros e'emplos. ara declarar una clase sigue el siguiente esquema!
class 1Clase2
donde! private
El significado de estas pala#ras se e@plica ms adelante. Una clase comienza por la pala#ra reservada class seguida del nom#re de la clase. or convenio los nom#res con la inicial may(sculas. "i queremos usar varias pala#ras, las concatenamos sin espacios con las iniciales en may(scula. A continuacin se definen los atri#utos, seguido del constructorQes y de la declaracin de m&todos.
/:: Clase ;ue representa un n<mero comple'o! :/ class Comple'o 3 //declaraci4n de atri&utos private double real9 ima*inario;
//declaraci4n de constructor public Comple'o+double real9 double ima*inario, 3 this!real( real; this!ima*inario( ima*inario; 7
//declaraci4n de m8todos
/:: =ranscri&e el comple'o a >trin*! : @returnun strin* con la parte entera y la ima*inaria :/ public >trin* to>trin*+, 3 return new >trin*+real ? @?@? ima*inario ? @i@,; 7
/:: >uma al comple'o de este o&'eto otro comple'o! : @param v el comple'o ;ue sumamos
Una clase necesita almacenar alg(n tipo de informacin que defina el o#'eto en cuestin. Esto se har en los atri#utos o campos de la clase. En el e'emplo queremos representar un n(mero comple'o, y por lo tanto vamos a necesitar almacenar la parte real y la parte imaginaria del n(mero. El siguiente paso suele ser declarar el constructor. Un constructor es un m&todo que tiene el mismo nom#re de la clase y que se utiliza para inicializar un o#'eto. %iene una serie de parmetros separados por comas, en nuestro e'emplo, la parte real y la parte imaginaria del n(mero comple'o. El cdigo de este m&todo 0las instrucciones entre RHS 3 se limita a copiar estos valores en los atri#utos del o#'eto. Aunque aquaparece un pro#lema, los parmetros del m&todo 0real, imaginario3 y los atri#utos e la clase 0real, imaginario3 se llaman igual. ara resolverlo podemos anteponer a los atri#utos la pala#ra reservada this. ;e esta forma indicamos que nos referimos a los atri#utos del o#'eto. ara terminar declaramos los m&todos de la clase. ,os m&todos son equivalentes a las funciones o procedimientos de otros lengua'es y son utilizados para modificar o consultar el estado de muestro o#'eto. ,os m&todos suelen comenzar indicando su visi#ilidad 0pu&lic9 protected o private3. El significado de cada una de estas pala#ras se e@plica ms adelante. A continuacin los m&todos indican el tipo de datos que devuelven. En el e'emplo el primer m&todo devuelve un "tring y el segundo void, o lo que es lo mismo nada. ,uego sigue el nom#re del m&todo y los parmetros. ;entro del primer m&todo se utiliza la pala#ra reservada return para indicar el valor devuelto por el m&todo.
,a clase rincipal es algo at-pica, no tiene atri#utos ni constructor, (nicamente el m&todo main. :uando en un proyecto e@iste una clase tiene un m&todo con este perfil, es el que se llama para comenzar la e'ecucin. :omo parmetros este m&todo reci#e un array de "trings. Esta informacin tiene inter&s cuando el programa es e'ecutado desde la l-nea de comandos con parmetros. El la primera l-nea se declaran los o#'etos z y G. En las dos siguientes l-neas se inicializan los o#'etos llamando al constructor. "e utiliza la e@presin! Bo.jetoC = ne' BClaseC BparDmetrosC#;. %am#i&n es posi#le declarar e inicializar el o#'eto en la misma sentencia de la siguiente forma! BClaseC Bo.jetoC = ne' BClaseC BparDmetrosC#; En el e'emplo ser-a! Comple'o A ( new Complejo -B!C9 D!.,; "iguiendo con el e'emplo en la siguiente l-nea se llama a un m&todo suma , del o#'eto A. "e sigue elsiguiente e@presin!
1o&'eto2!1m8todo2+1parGmetros2,; En la (ltima l-nea utilizamos >ystem!out!println+, para sacar por la consola una cadena de caracteres. Es decir, si e'ecutamos la aplicacin desde una consola de la l-nea de comandos se mostrar un mensa'e por pantalla.
#jercicio paso a paso: $reaci(n de una primera clase 2. 1. =. 8. M. T. Arranca (clip$e. :rea un nuevo proyecto )ntroduce en Nom/re de proyecto: :omple'os y pulsa el ;entro de la vista (xplorador de pa#uete$ E ,nidad5 E $rc y )ntroduce en el campo Nom/re! :omple'o y pulsa en Finali@ar. $eemplaza el cdigo por el mostrado anteriormente en el
selecciona Nue&a E Cla$e. 4. )ntroduce en el campo Nom/re! $rincipal y pulsa en Finali@ar. 2>. $eemplaza el cdigo por el mostrado anteriormente en el e'emplo de la clase rincipal. 22. 21. ulsa en el #otn =uardar ulsa el #otn (jecuci)n para almacenar el fichero. para e'ecutar el proyecto.
2. :rea un nuevo proyecto +ava con nom#re CoordenadasHIeo*raficas 1. =. 8. M. :rea una clase con el nom#re Ieo$unto. ;efine dos atri#utos lon'itud y latitud tipo double. ;efine el constructor de la clase. ;efine el m&todo to"trin' # de forma similar a como se hizo en
la clase Complejo. ;efine el m&todo double distancia 2eoEunto punto# para apro@imar la distancia en metros entre dos coordenadas. odemos utilizar el algoritmo %a&er$ine!
Una posi#le implementacin en +ava de este algoritmo se muestra a continuacin! final double 0AJIOH=I%00A ( KDLB...; // en metros double d@at ( Math.to*adian$+latitud - punto.latitud,; double d@on ( Math.to*adian$+lon*itud - punto.lon*itud, ; double latB ( Math.to*adian$+punto.latitud,; double latE ( Math.to*adian$+latitud,; double a ( Math!sin+d@at/E, : Math!sin+d@at/E, ? Math!sin+d)on/E, : Math!sin+d)on/E, : Math!cos+latB, : Math!cos+latE,; double c ( E : Math!atan2+Math.$#rt+a,9 Math.$#rt+Ba,,; return c : RADIO_TIERRA;
T.
correctamente.
anterior siguiente
/: Comentario de varias lMneas :/ ,a documentacin del cdigo resulta vital si queremos que este sea reutiliza#le. +ava nos permite realizar esta importante tarea utilizando en m-nimo esfuerzo. ara descu#rir cmo se utiliza te proponemos en siguiente e'ercicio.
2. En la vista Explorador de paquetes selecciona 2 -nidad? 2 src 2 7rincipal.java para visualizar el cdigo de esta clase. 1. "it(a el ratn so#re la pala#ra suma. Aparecer una ventana como la siguiente!
%e preguntars cmo es posi#le que Eclipse ya disponga de la documentacin de una clase que aca#amos de escri#ir. =. ara responder a esta pregunta visualiza la clase Comple'o y comprue#a que el comentario introducido antes de m&todo suma es! /:: >uma al comple'o de este o&'eto otro comple'o! : @param v el comple'o ;ue sumamos :/
%odo comentario que introduzcamos de la forma /:: :/ ser utilizado por +ava para documentar el elemento que es definido a continuacin. Este elemento puede ser una clase, una varia#le o un m&todo. A este sistema de documentacin automtica se le conoce como javadoc.
8ee (as siguientes secciones de( (ibro: "i quieres ampliar so#re estos conceptos puedes leer del li#ro @7ensando en <avaA el (ltimo apartado del cap-tulo 1! D:omentarios y documentacin empotradaE
0ractica: geogr91icas
creando unos determinados atri#utos y escri#iendo el cdigo de los diferentes m&todos. El encapsu(amiento consiste en ocultar los atri#utos de un o#'eto de manera que slo se puede cam#iar mediante las operaciones definidas para ese o#'eto. ;icho de otra forma, procurar que el interface sea lo ms independiente posi#le de la implementacin. En +ava el encapsulamiento est estrechamente relacionado con la visi#ilidad. ara indicar la visi#ilidad de un elemento 0tanto atri#utos como m&todos3 podemos anteceder una de las siguientes pala#ras! pub(ic! accesi#les desde cualquier clase. private! slo son accesi#les por la clase actual. protected! slo por la clase actual, sus descendientes y clases de nuestro paquete.
1si no indicamos nada2
paquete.
2. En el Explorador de paquetes dentro del proyecto :omple'os, a#re la clase :omple'o.'ava 1. "it(a el cursor 'usto antes de la (ltima llave 0S3 .
=. ulsa con el #otn derecho y selecciona la opcin Cdi,o /uente2 Benerar m4todos obtencin y establecimiento... 8. ulsa el #otn 'eleccionar todo y luego &ceptar. Ners cmo se inserta el siguiente cdigo!
public double *et0eal+, 3 return real; 7
M.
)nserta en la clase Geo unto los ,etters y setters necesarios para acceder a sus atri#utos.
"i quieres puedes ver el e'emplo completo de cmo se podr-a implementar esta clase en el siguiente fichero.
Bodifica la clase Geo unto para que los atri#utos longitud, latitud sean representados mediante unint en lugar de con doub(e. ara disponer de una precisin adecuada ahora representarn millon&simas de grado en lugar de grados. ;e esta forma tenemos una representacin ms compacta. :omo veremos ms adelante esta representacin es la utilizadada en el A ) de Google Baps. )B 7$%A9%E, el interfaz de la clase ha de permanecer e@actamente igual. ara el constructor puedes utilizar el siguiente cdigo.
public Ieo$unto+double lon*itud9 double latitud, 3 this!lon*itud ( +int, +lon*itud : B%K,; this!latitud ( +int, +latitud : B%K,;
la clase Geo unto. ,os atri#utos de esta clase son longitud y latitud. 9os vemos o#ligados a cam#iar el softGare dado que ahora necesitamos representar tam#i&n la altitud de cada punto. Una opcin podr-a ser reescri#ir la clase Geo unto y modificar todos sus m&todos. uede parecer sencillo, pero imagina que esta clase tuviera 2>.>>> l-neas de cdigo. El tiempo empleado y los errores cometidos ser-an frecuentes. +ava nos proporciona una forma me'or de tra#a'ar. ,a idea consiste en definir una nueva clase, por e'emplo 9uevoGeo unto, que herede de Geo unto y que a.ada el nuevo atri#uto. ;e esta forma podremos a.adir nuevas funcionalidades sin tener que modificar la clase de partida. Bs todav-a, es posi#le que ni siquiera dispongamos del cdigo de una clase para poder heredar de ella. En este apartado vamos a descri#ir como la herencia nos permite resolver el pro#lema de la reutilizacin de cdigo de forma sencilla, pero a su vez eficiente. :uando queremos construir una nueva clase es muy frecuente que ya dispongamos de otra que realice parte de la que queremos hacer. ,a herencia consiste en crear la nueva clase a partir de otra que llamaremos padre. ,a clase hi'a va a heredar los atri#utos y m&todos de la clase padre y podr crear nuevos atri#utos y m&todos para completar su comportamiento. ,a clase hi'a tam#i&n puede volver a definir los m&todos de la clase padre. En tal caso es recomenda#le 0no o#ligatorio3 indicarlo con W7verrideK de esta forma evitamos errores ha#ituales cuando cam#iamos alg(n carcter o parmetro. "i un m&todo ha sido so#rescrito podemos acceder al de la clase padre con el siguiente prefi'o super.Xm&todoJ0XparmetrosJ3. ara llamara al constructor del padre super0XparmetrosJ3. El constructor de la clase hi'a suele comenzar llamando al constructor de la clase padre, para ello escri#iremos como primera l-nea de cdigo! super0XparmetrosJ3K En el siguiente e'emplo se muestra una clase que hereda de :omple'o. Esta nueva clase dispone del nuevo atri#uto es$eal que nos indicar si este n(mero pertenece a los n(meros reales, es decir, la parte imaginaria es igual a cero! class ComplejoAmpliado extends Complejo { private boolean es%eal;
public ComplejoAmpliado double re) double im# { super re) im#; es%eal = im ==<; & public ComplejoAmpliado double re# { super re) <#; es%eal = true; & "Override public void suma+Comple'o v, 3 es%eal = 'et!ma'inario # == - v.'et!ma'inario #; super.suma v#; 7 public boolean es0eal+,3 return es0eal; 7 7 ,a clase que aca#amos de ver no tiene acceso a los atri#utos de la clase padre, dado que estos han sido declarados con private. $ecuerda que si quieres de'ar que las clases que hereden de ti tengan acceso a estos atri#utos, pero no as- el resto de las clases, has de declararlos como protected. ;ado que el acceso directo a los atri#utos es ms eficiente que invocar los m&todos getter$ y setters, puede resultar interesante declarar los atri#utos como protected. Aunque claro, en este caso la modificacin de los atri#utos de la clase padre o#ligar a modificar todos los herederos que accedan directamente a estos atri#utos.
Ejercicio paso a paso: 8a c(ase Comp(ejo+mp(iado 2. En el Explorador de paquetes dentro del proyecto :omple'os, crea la clase:omple'oAmpliado.class 1. :opia el cdigo que aparece en el e'emplo anterior.
=. Bodifica la clase rincipal para que en lugar de crear dos o#'etos como :omple'o lo haga como :omple'oAmpliado. Nerifica su funcionamiento. 8. A#re la clase :omple'o y modifica la visi#ilidad de de los atri#utos reemplazando privatepor protected. M. En la clase reemplaza la l-nea
es0eal ( *etIma*inario+, (( v!*etIma*inario+,; por es0eal ( ima*inario (( - v!ima*inario; T. Nerifica que no se ha introducido ning(n error y que podemos e'ecutar el proyecto.
0ractica: Nueva c(ase coordenadas geogr91icas con a(tura :rea la clase Geo untoAlt que herede de Geo unto de forma que adems de la longitud y latitud se almacena la altura de un punto geogrfico. ara calcular la distancia teniendo en cuenta la diferencia de alturas, si suponemos que las distancias son cortas, podemos despreciar la curvatura de la tierra. ;e esta forma podemos aplicar itgoras para calcular la nueva distancia. Es decir!
Ejercicio paso a paso: Sobrecarga 2. En el Explorador de paquetes dentro del proyecto :omple'os, a#re la clase:omple'o.class 1. A.ade los siguientes m&todos. 7#serva como su nom#re coincide con un m&todo ya e@istente.
public void suma+double re9 double im, 3 real ( real ? re; ima*inario ( ima*inario ? im; 7
0ractica: Nuevo constructor en (a c(ase coordenadas geogr91icas Bodifica la clase Geo unto para que disponga de un nuevo constructor. Este ha de permitir inicializar el o#'eto a partir de dos enteros que representen millon&simas de grado.
La clase '&ject
En las clases que hemos creado al principio de este mdulo 0Complejo y 2eoEunto3no se utiliza#a la pala#ra extends para heredar de otra clase. "in em#argo, en estos casos +ava crea la nueva clase heredando de la clase O&'ect. ,a clase O&'ect es la ra-z del r#ol genealgico de herencias en +ava. Esta clase dispone de una serie de m&todos que por tanto van a estar disponi#les en todos los o#'etos que creemos. Entre estos m&todos se incluye! to"trin' #) 'etClass #o eJuals O.ject o# Un o#'eto de la clase hi'a tam#i&n lo es de la clase padre y de todos sus antecesores. or e'emplo, un o#'eto de la clase Comple'oAmpliado tam#i&n lo ser de la clase Comple'o y tam#i&n de O&'ect. ;e hecho todo o#'eto en +ava ser necesariamente de la clase O&'ect! Esta caracter-stica que aca#amos de comentar es una propiedad de la herencia, en este apartado vamos a estudiar otro aspecto importante de la programacin orientada a o#'etos, el polimorfismo.
Polimor(ismo
El polimorfismo consiste en declarar un o#'eto de una clase, pero instanciarlo como un descendiente de dicha clase 0lo contrario no es posi#le3. Es decir, utilizaremos la siguiente e@presin! BClase3padreC Bo.jetoC = ne' BClase3hijaC BparDmetrosC#; A primera vista no parece demasiado (til, pero en la prctica va a tener una gran potencia. ara e@plicarlo utilizaremos un e'emplo real. :uando estemos desarrollando una aplicacin Android y queremos introducir un #otn en el interfaz de usuario, vamos a poder indicar un grfico de fondo. ara indicar este fondo tendremos que indicar un o#'eto de la clase /rawa.le. ,a clase /rawa.lerepresenta algo que se puede di#u'ar, tiene muchos descendientes! Bitmap/rawa.le 0un fichero 9G o + G3, "hape/rawa.le 0un grfico a partir de primitivas vectoriales3, 2radien/rawa.le 0degradado de color3, Animation/rawa.le 0animaciones frame a frame3, H ,a clase /rawa.le no permite declarar un o#'eto directamente de esta clase. Un /rawa.le es algo que se puede di#u'ar pero que no sa#emos cmo. Un o#'eto real ha de declararse de algunos de sus descendientes, que si sa#en cmo di#u'arse. Esto da mucha potencia a la hora de escoger el tipo de fondo para nuestro #otn, podemos usar un fichero 9G, un degradado, una animacin,... Y ms todav-a, podr-amos crear nuestra propia clase,Animacion@ucesKavidad, que descenda de Animation/rawa.le! Un o#'eto de esta clase tam#i&n lo ser-a de /rawa.le y por lo tanto vamos a poder utilizarlo como fondo de nuestro #otn. "i refle@ionamos so#re lo que hemos conseguido gracias al polimorfismo veremos que no es poca cosa. ,os dise.adores de la clase #otn 0realmente se llama Button3 pudieron tomar una decisin de dise.o, concretamente cmo podr-amos di#u'ar el fondo del #otn, sin la necesidad de especificar e@actamente cmo hacerlo. Bs adelante hemos podido dise.ar nuevas clases para di#u'ar este fondo simplemente creando descendientes de la clase /rawa.le.
Conversin de tipos
)maginemos que hemos declarado un o#'eto de una clase pero lo hemos construido utilizando un constructor de una clase descendiente, tal y como se muestra a continuacin! Comple'o c ( ne' Comple'oAmpliado+BE!F,; Namos a poder utilizar cualquier m&todo de c definido en la clase :omple'o o cualquiera de sus descendientes! c.to"trin' #; c.'etClass #;
ero la siguiente m&todo no podr ser utilizado! c.es%eal #!! Esto es de#ido a que est& m&todo no est definido para la clase Complejo. 9o o#stante, estamos seguros de que c es de la clase ComplejoAmpliado y por lo tanto este m&todo s- que puede ser llamado. ara solucionar este pro#lema, podemos utilizar lo que en +ava se conoce como tipecast o cam#io de tipo. A partir de este momento .objeto/ ser considerado de la clase .$lase/. Aunque no no haya sido declarada de esta clase. or lo tanto podremos escri#ir! ++Comple'oAmpliado,c,!es0eal+,
!so de instanceo*
ara al sistema si un o#'eto es de una determinada clase con! .objeto/ instanceo* .$lase/ A continuacin se muestran algunos e'emplos! Comple'o c ( ne' ComplejoAmpliado(12.4 ! i* (c instanceo* "bject # $$siempre true para cual%uier objeto i* (c instanceo* Complejo # $$true i* (c instanceo* ComplejoAmpliado # $$true i* (((ComplejoAmpliado c .es&eal( #
0ractica: 0o(imor1ismo con (a c(ase -eo0unto :rea un array de 8 o#'etos de la clase Geo unto. :onstruye los dos primeros como Geo unto y los dos siguientes como Geo untoAmpliado. )mplementa un #ucle que recorra el array invocando su m&todo getAlt03. Nerificar tam#i&n si se trata de un Geo untoAmpliado y en tal caso indicar si se trata de un n(mero $eal.
Encuesta Mdu(o 1
ara me'orar en la preparacin del material queremos conocer como te ha ido en el primer mdulo Z:untas horas has dedicado al mdulo 2[ *as de contar todo tipo de actividades, como foros, instalacin softGare o tareas complementarias
menos de 1 de 1 a 8 de 8 a T de T a 5 de 5 a 2>
de 2> a 2= de 2= a 2/ ms de 2/
Z*as tenido alg(n pro#lema con la BiriadaL[ Estamos estrenando una nueva plataforma y est dando alg(n que otro pro#lema. Aunque no tengo la posi#ilidad de resolver este tipo de pro#lemas, me gustar-a conocer que tal ha ido.
9ada destaca#le "alvo peque.os pro#lemas que faltan por pulir, ha funcionado #ien *e tenido alg(n pro#lema, pero ya est resuelto *e tenido pro#lemas importantes con la plataforma
Z:omo ves el nivel del curso en relacin a tus conocimientos previos[ Es posi#le que no sepas lo que es el cdigo nativo o un ".7. ...
E@cesivo. "e dan por sa#idas muchas cosas, por lo que no puedo seguir las e@plicaciones Un poco alto. En algunas ocasiones me pierdo. Adecuado. "e a'usta a mis conocimientos previos. ;emasiado fcil. Ya conoc-a la mayor-a de lo que se ha e@plicado.
Z:mo valoras el sistema de aprendiza'e utilizado[ Es pronto, pero queremos conocer tus primeras impresiones. 9o se est preguntando por la plataforma sino por la forma de aprender.
9o me ha gustado nada. $egular. Be va a costar mucho tra#a'o adaptarme a esta forma de aprender. Cueno. Aunque se podr-a me'orar en varios aspectos. E@celente. Be ha parecido casi perfecto.
)ntroduccin
El dise.o de la interfaz de usuario co#ra cada d-a ms importancia en el desarrollo de una aplicacin. ,a calidad de la interfaz de usuario puede ser uno de los factores que conduzca al &@ito o al fracaso de todo el proyecto. "i has realizado alguna aplicacin utilizando otras plataformas, advertirs que el dise.o de la interfaz de usuario en Android sigue una filosof-a muy diferente. En Android la interfaz de usuario no se dise.a en cdigo, sino utilizando un lengua'e de marcado similar al *%B,. A lo largo de este cap-tulo mostraremos una serie de e'emplos que te permitirn entender el dise.o de la interfaz de usuario en Android. Aunque no ser la forma ha#itual de tra#a'ar, comenzaremos creando el interfaz de usuario mediante cdigo. ;e esta forma compro#aremos como cada uno de los elementos del interfaz de usuario 0vistas3 realmente son o#'etos +ava. :ontinuaremos mostrando cmo se define el interfaz de usuario utilizando cdigo LB,. asaremos luego a ver las herramientas de dise.o integradas en Eclipse. "e descri#ir el uso de :ayouts que nos permitir una correcta organizacin de las vistas y como el uso de recursos alternativos nos permitir adaptar nuestra interfaz a diferentes circunstancias y tipos de dispositivos. En este cap-tulo tam#i&n comenzaremos creando la aplicacin de e'emplo desarrollada a lo largo del curso, Asteroides. :rearemos la actividad principal, donde simplemente mostraremos cuatro #otones, uno de ellos arrancar una segunda actividad para mostrar una ca'a Acerca deH A continuacin aprenderemos a crear estilos y temas y los aplicaremos a estas actividades. ara terminar el cap-tulo propondremos varias prcticas para aprender a utilizar diferentes tipos de vistas y ,ayouts.
7#'etivos
;escri#ir cmo se realiza el dise.o del interfaz de usuario en una aplicacin Android. Aprender a tra#a'ar con vistas y mostrar sus atri#utos ms importantes. Enumerar los tipos de ,ayouts que nos permitirn organizar las vistas. Bostrar cmo se utilizan los recursos alternativos. Aprenderemos a crear estilos y temas para personalizar nuestras aplicaciones. Bostrar cmo interactuar con las vistas desde el cdigo +ava ;escri#ir el uso de %a#,ayout
Nota sobre 1ava: Para poder utili@ar el o/jeto TexView !a$ de importar un nue&o pa#uete; para ello aHade al principio Mimport android.wid'et.?ext$iewKE. +tra alternati&a e$ pul$ar $trl230i*t2O; para #ue $e aHadan automCticamente lo$ pa#uete$ #ue :altan. ,a interfaz de usuario de Android est #asada en una 'erarqu-a de o#'etos descendientes de la clase $iew0vista3. Una vista es un o#'eto que se puede di#u'ar y se utiliza como un elemento en el dise.o de la interfaz de usuario 0un #otn, una imagen, una etiqueta de te@to como en el utilizado en el e'emplo,H3. :ada uno de estos elementos se define como una su#clase de la clase $iewK la su#clase para representar un te@to es ?ext$iew. El e'emplo comienza creando un o#'eto de la clase =e tNiew! El constructor de la clase acepta como parmetro una instancia de la clase Context 0conte@to3. Un conte@to es un mane'ador del sistema que proporciona servicios como la resolucin de recursos, o#tencin de acceso a #ases de datos o preferencias. ,a claseActivity es una su#clase de Context, y como la clase MainActivity es una su#clase de Activity, tam#i&n es tipo Context. or ello, puedes pasar this 0el o#'eto actual de la clase MainActivity3 como conte@to del?ext$iew. ;espu&s se define el contenido del te@to que se visualizar en el =e tNiew mediante set?ext Char"eJuence#. Finalmente, mediante setContentNiew+,se indica la vista utilizada por la actividad. =. E'ecuta el proyecto para verificar que funciona.