Está en la página 1de 59

Creacin de un programa

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.

$ellena los detalles del proyecto con los siguientes valores!

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;

import android.app.Activity; import android.os.Bundle; import android.view.Menu;

public class MainActivity extends Activity {

@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 de( programa


Una vez creada esta primera aplicacin vamos a ver dos alternativas para e'ecutarla! en un emulador y en un dispositivo real.

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-!

Ejecucin en un terminal real


E'ecutar y depurar tus programas en un terminal real resulta posi#le desde el ";<. 9o tienes ms que usar un ca#le U"C para conectarlo al :. $esulta imprescindi#le ha#er instalado un driver especial en el :. uedes encontrar un driver gen&rico que se encuentra en la carpeta android!sd"!#indo#s$usb%driver del ";< Android. Aunque lo ms pro#a#le es que tengas que utilizar el driver del fa#ricante.

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.

-u$ca la $iguiente cla&e y /)rrala: 4&id'5//67pid'5c504

E(ementos de un pro,ecto +ndroid


Un proyecto Android est formado #sicamente por un descriptor de la aplicacin 0&ndroid+ani/est.xml3, el cdigo fuente en +ava y una serie de ficheros con recursos. :ada elemento se almacena en una carpeta espec-fica. Aprovecharemos el proyecto que aca#amos de crear para estudiar la estructura de un proyecto Android. 9o te asustes con el e@ceso de informacin. Bas adelante se dar ms detalles so#re la finalidad de cada fichero.

$rc!

:arpeta que contiene el cdigo fuente de la aplicacin.

:omo puedes o#servar los ficheros +ava se almacenan en un espacio de nom#res.

gen! :arpeta que contiene el cdigo generado de forma automtica por el ";<.
9unca hay que modificar de forma manual estos ficheros. ;entro encontraremos:

-uildCon:ig.ja&a! ;efine la constante /0B12 para que desde +ava


puedas sa#er si tu aplicacin est en fase de desarrollo.

*.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.

/in! En esta carpeta se compila el cdigo y se genera el .apA, fichero


comprimido que contine la aplicacin final lista para instalar.

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.

drawa/le! En esta carpeta se almacenan los ficheros de imgenes 0+ G o


9G3 y descriptores de imgenes en LB,.

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.

menu!Ficheros LB, con los men(s de cada actividad.

&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.

anim! :ontiene ficheros LB, con animaciones %Geen. ,as animaciones


son descritas al final del cap-tulo 8.

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.

ic'launc!er<we/.png! )cono de la aplicacin de gran tama.o para ser usado en


pginas ?e#. El nom#re puede variar si se indic uno diferente en el proceso de creacin del proyecto. *a de tener una resolucin de M21@M21 0con alfa3.

proguard<project.txt! Fichero de configuracin de la herramienta Pro=uard,


que te permite optimizar y ofuscar el cdigo generado. Es decir, se o#tiene un .apA ms peque.o y donde resulta ms dif-cil hacer ingenier-a inversa.

de:ault.propertie$! Fichero generado automticamente por el ";<. 9unca hay


que modificarlo. "e utiliza para compro#ar la versin del A ) y otras caracter-sticas cuando se instala la aplicacin en el terminal. NOTA: Como $e aca/a de &er el u$o de >"? e$ ampliamente utili@ado en la$ aplicacione$ Android. Tam/iAn e$ conocido el exce$i&o u$o de e$pacio #ue $upone utili@ar e$te :ormato para almacenar in:ormaci)n. ($to parece contradecir la :ilo$o:Ba de Android #ue intenta optimi@ar al mCximo lo$ recur$o$. Para $olucionar el pro/lema; lo$ :ic!ero$ >"? $on compilado$ a un :ormato mC$ e:iciente ante$ de $er tran$:erido$ al terminal m)&il.

E(ementos de un pro,ecto +ndroid


Un proyecto Android est formado #sicamente por un descriptor de la aplicacin 0&ndroid+ani/est.xml3, el cdigo fuente en +ava y una serie de ficheros con recursos. :ada elemento se almacena en una carpeta espec-fica. Aprovecharemos el proyecto que aca#amos de crear para estudiar la estructura de un proyecto Android. 9o te asustes con el e@ceso de informacin. Bas adelante se dar ms detalles so#re la finalidad de cada fichero.

$rc!

:arpeta que contiene el cdigo fuente de la aplicacin.

:omo puedes o#servar los ficheros +ava se almacenan en un espacio de nom#res.

gen! :arpeta que contiene el cdigo generado de forma automtica por el ";<.
9unca hay que modificar de forma manual estos ficheros. ;entro encontraremos:

-uildCon:ig.ja&a! ;efine la constante /0B12 para que desde +ava


puedas sa#er si tu aplicacin est en fase de desarrollo.

*.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.

/in! En esta carpeta se compila el cdigo y se genera el .apA, fichero


comprimido que contine la aplicacin final lista para instalar.

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.

drawa/le! En esta carpeta se almacenan los ficheros de imgenes 0+ G o


9G3 y descriptores de imgenes en LB,.

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.

menu!Ficheros LB, con los men(s de cada actividad.

&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.

anim! :ontiene ficheros LB, con animaciones %Geen. ,as animaciones


son descritas al final del cap-tulo 8.

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.

ic'launc!er<we/.png! )cono de la aplicacin de gran tama.o para ser usado en


pginas ?e#. El nom#re puede variar si se indic uno diferente en el proceso de creacin del proyecto. *a de tener una resolucin de M21@M21 0con alfa3.

proguard<project.txt! Fichero de configuracin de la herramienta Pro=uard,


que te permite optimizar y ofuscar el cdigo generado. Es decir, se o#tiene un .apA ms peque.o y donde resulta ms dif-cil hacer ingenier-a inversa.

de:ault.propertie$! Fichero generado automticamente por el ";<. 9unca hay


que modificarlo. "e utiliza para compro#ar la versin del A ) y otras caracter-sticas cuando se instala la aplicacin en el terminal. NOTA: Como $e aca/a de &er el u$o de >"? e$ ampliamente utili@ado en la$ aplicacione$ Android. Tam/iAn e$ conocido el exce$i&o u$o de e$pacio #ue $upone utili@ar e$te :ormato para almacenar in:ormaci)n. ($to parece contradecir la :ilo$o:Ba de Android #ue intenta optimi@ar al mCximo lo$ recur$o$. Para $olucionar el pro/lema; lo$ :ic!ero$ >"? $on compilado$ a un :ormato mC$ e:iciente ante$ de $er tran$:erido$ al terminal m)&il.

Componentes de una ap(icacin


E@isten una serie de elementos clave que resultan imprescindi#les para desarrollar aplicaciones en Android. En este apartado vamos a realizar una descripcin inicial de algunos de los ms importantes. A lo largo del li#ro se descri#irn con ms detalle las clases +ava que implementan cada uno de estos componentes. Vista (View) ,as vistas son los elementos que componen la interfaz de usuario de una aplicacin. "on por e'emplo, un #otn, una entrada de te@to,H %odas las vistas van a ser o#'etos descendientes de la clase NieG, y por tanto, pueden ser definidos utilizando cdigo +ava. "in em#argo, lo ha#itual va a ser definir las vistas utilizando un fichero LB, y de'ar que el sistema cree los o#'etos por nosotros a partir de este fichero. Esta forma de tra#a'ar es muy similar a la definicin de una pgina Ge# utilizando cdigo *%B,. Layout Un ,ayout es un con'unto de vistas agrupadas de una determinada forma. Namos a disponer de diferentes tipos de ,ayouts para organizar las vistas de forma lineal, en cuadr-cula o indicando la posicin a#soluta de cada vista. ,os ,ayouts tam#i&n son o#'etos descendientes de la clase NieG. )gual que las vistas los ,ayouts pueden ser definidos en cdigo, aunque la forma ha#itual de definirlos en utilizando cdigo LB,. Actividad (Activity) Una aplicacin en Android va a estar formada por un con'unto de elementos #sicos de visualizacin, coloquialmente conocidos como pantallas de la aplicacin. En Android cada uno de estos elementos, o pantallas, se conoce como actividad. "u funcin principal es la creacin del interfaz de usuario. Una aplicacin suelen necesitar varias actividades para crear el interfaz de usuario. ,as diferentes actividades creadas sern independientes entre s-, aunque todas tra#a'arn para un o#'etivo com(n. %oda actividad ha de pertenecer a una clase descendiente de Activity. Servicio (Service) Un servicio es un proceso que se e'ecuta DdetrsE, sin la necesidad de una interaccin con el usuario. Es algo parecido a un demonio en Uni@ o a un servicio en ?indoGs. En Android disponemos de dos tipos de servicios! servicios locales, que pueden ser utilizados por aplicaciones

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)*+:'i cuando ejecutas la aplicacin no te deja y te indica el si,uiente error

7curre por#ue una aplicaci)n con el mi$mo nom/re de pa#uete


1com.example.android.api$3 ya exi$te y ademC$ !a detectado #ue la aplicaci)n !a $ido :irmada con un certi:icado digital di:erente al #ue e$tCi$ utili@ando &o$otro$. Si !u/iera $ido creado por el mi$mo de$arrollador reempla@arBa la aplicaci)n ya in$talada por la #ue #ueremo$ in$talar. 'e soluciona desinstalando antes la aplicacin. 0ienes dos opciones

Como lo 1aces 1abitualmente en tu dispositivo &justes2&plicaciones2 &pi(emos2(esinstalar (esde la l3nea de comando


ad/ unin$tall com.example.android.api$

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.

*az do#le clicA en la l-nea at com!e ample %e a#rir la

actividad +ain&ctivity y te situar en la l-nea 2M.

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

http*++we.junior.lamula.pe+8<:<+<;+:>+:6-videos-curso-de-java-paraprincipiantes+johnny ?1?O%!A@0" AA$A http*++www.codexion.com+tutorialesjava+java+concepts+index.html

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)*+:'i cuando ejecutas la aplicacin no te deja y te indica el si,uiente error

7curre por#ue una aplicaci)n con el mi$mo nom/re de pa#uete


1com.example.android.api$3 ya exi$te y ademC$ !a detectado #ue la aplicaci)n !a $ido :irmada con un certi:icado digital di:erente al #ue e$tCi$ utili@ando &o$otro$. Si !u/iera $ido creado por el mi$mo de$arrollador reempla@arBa la aplicaci)n ya in$talada por la #ue #ueremo$ in$talar. 'e soluciona desinstalando antes la aplicacin. 0ienes dos opciones

Como lo 1aces 1abitualmente en tu dispositivo &justes2&plicaciones2 &pi(emos2(esinstalar (esde la l3nea de comando


ad/ unin$tall com.example.android.api$

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.

*az do#le clicA en la l-nea at com!e ample %e a#rir la

actividad +ain&ctivity y te situar en la l-nea 2M.

Materia( comp(ementario: 6ntroduccin a Java

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

Materia( comp(ementario: Creacin de c(ases en Java


En +ava es un lengua'e orientado a o#'etos, donde casi todo se realiza utilizando o#'etos. or lo tanto va a resultar vital conocer cmo definir clases de o#'etos de +ava. =90& En <ava solo 1ay dos excepciones al uso de objetos, adems de estos podemos utilizar variables simples y arrays. :a /orma de 1acerlo es

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.;

seguido de otros paquetes definidos previamente que queremos utilizar!

import android!app!Activity; import android!content!/roadcast0eceiver; import

: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

//declaraci4n de atri&utos 5visi&ilidad6 5modificadores6 1tipo2 1atri&uto2 5( valor6; !!!

//declaraci4n de constructor public 1Clase2+1ar*umentos2, 3 1instrucciones2; 7

//declaraci4n de m8todos 5visi&ilidad6 5modificadores6 1tipo2 1m8todo2+1ar*umentos2, 3 1instrucciones2; 7 !!! 7

donde! private

5visi&ilidad6 ( pu&lic9 protected o 5modificadores6 ( final9 static y a&stract

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.

Un e'emplo de una clase se muestra a continuacin!

/:: 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

:/ public void suma+Comple'o v, 3 real ( real ? v!real; ima*inario ( ima*inario ? v!ima*inario; 7 7

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.

Materia( comp(ementario: Creacin , uti(i7acin de objetos en Java


ara crear varios o#'etos de la clase anterior podemos utilizar la siguiente clase!
class $rincipal 3 public static void main+>trin*56 main, 3 Comple'o A9 w; A ( new Comple'o+-B!C9 D!.,; w ( new Comple'o+-B!E9 E!F,; A!suma+w,; >ystem!out!println+@Comple'o- @ ? A!to>trin*+,,; 7 7

,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

+ava! Arc!i&oENue&oEProyectoDEGa&aEProyecto Ga&a. #otn Finali@ar. selecciona Nue&a E Cla$e.

e'emplo de la clase :omple'o. /. 5. ulsa en el #otn =uardar para almacenar el fichero.

;entro de la vista (xplorador de pa#uete$ E ,nidad5 E $rc y

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=. El la vista Con$ola aparecer la siguiente informacin!

Practica: La clase coordenada geogr)*ica

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.

:rea la clase rincipalde forma similar a como se hizo en el

proyecto :omple'os. /. E'ecuta el proyecto y verifica que todo funciona

correctamente.

anterior siguiente

Materia( comp(ementario: Comentarios , documentacin javadoc


97%A. Este apartado no es esencial para el desarrollo del curso. "i no dispones de tiempo puedes saltrtelo. ,os comentarios en +ava se introducen de la misma forma que en : o en :OO. // Comentario de una lMnea

/: 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.

#jercicio paso a paso: +ocumentaci(n del c(digo utili,ando javadoc.

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

ocumentacin de (a c(ase coordenadas

;ocumenta todos los elementos de la clase Geo unto.

Materia( comp(ementario: Encapsu(amiento , visibi(idad en Java


ara un dise.o adecuado del softGare resulta imprescindi#le una correcta encapsulamiento del cdigo. El mayor pro#lema reside en que el softGare tiende a cam#iar con mucha facilidad, 0siempre encontramos me'ores formas de resolver un pro#lema3 y resulta imprescindi#le que estos cam#ios afecten lo menos posi#le a quienes utilizan este softGare. asemos a definir estos t&rminos de forma ms precisa. :uando dise.amos un softGare hay dos aspectos que resultan fundamentales! 6nter1ace! :mo este softGare puede ser utilizado. 6mp(ementacin! El cdigo utilizado para implementar los distintos algoritmos. El concepto de interfaz se define en +ava como los elementos de una clase que son visi#les desde fuera de esta. ,a implementacin se define

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

slo son accesi#les por clases de nuestro

paquete.

Acceso a los atri&utos de la clase


,os atri#utos de una clase estn estrechamente relacionados con su implementacin. or esta razn conviene marcarlos como private e impedir su acceso desde fuera. ;e esta forma en un futuro podremos cam#iar la representacin interna del o#'eto sin alterar su interface. Aunque en la teor-a esta afirmacin parece lgica en la prctica resulta dif-cil de seguir. ensemos en las dos clases que hemos dise.ado. En la de los n(meros comple'os al ha#er puesto private en los atri#utos no vamos a permitir que acceder la parte entera e imaginaria del o#'eto. ,o mismo ocurre con la longitud y latitud de una coordenada geogrfica. or lo tanto, resulta imposi#le consultar o modificar esta informacin una vez creado el o#'eto. ara solucionar este pro#lema vamos a utilizar los m&todos ,etters y setters 0o#tencin y esta#lecimiento3. $esulta tan frecuente su utilizacin que Eclipse incorpora una herramienta para crearlos de forma automtica. $ealiza el siguiente e'ercicio para comprendes su funcionamiento!

#jercicio paso a paso: $reaci(n autom)ticas de etters - setters

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

public void set0eal+double real, 3 this!real ( real; 7

public double *etIma*inario+, 3 return ima*inario; 7

public void setIma*inario+double ima*inario, 3 this!ima*inario ( ima*inario; 7

M.

ulsa en el #otn Buardar

para almacenar el fichero.

0ractica: Betters , setters en (a c(ase coordenadas geogr91icas

)nserta en la clase Geo unto los ,etters y setters necesarios para acceder a sus atri#utos.

Cam&io de la representacin interna de una clase


%ras insertar los cuatro m&todos del e'ercicio anterior, uno podr-a pensar que el resultado es el mismo que si hu#i&ramos puesto pub(ic delante de los dos atri#utos. 9o es e@actamente as-, imaginemos que ms adelante queremos verificar que la latitud de un Geo unto est& en el rango U-4>, 4>V, y en caso contrario lanzar una e@cepcin. "i los usuarios de la clase acceden directamente al atri#uto esto no ser posi#le. Bs todav-a, imagina que en un momento determinado queremos cam#iar la representacin interna de un n(mero comple'o para utilizar mdulo y fase en lugar de parte entera y parte imaginaria. "i hemos tenido la precaucin de no pu#licar los atri#utos, ser posi#le realizar este cam#io sin cam#iar el interface de la clase.
class Complejo { ++declaraciFn de atri.utos private double modulo" *ase& ++declaraciFn de constructor public Complejo double real) double ima'inario# { modulo = Math.!ypot1real; ima'inario3F (ase = Math.atan01ima'inario; real3F & ++declaraciFn de mGtodos public double 'et%eal # { return modulo H Math.cos (ase#; & I

"i quieres puedes ver el e'emplo completo de cmo se podr-a implementar esta clase en el siguiente fichero.

0ractica: Cambio de representacin de (a c(ase coordenadas geogr91icas

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,;

Materia( comp(ementario: :erencia en Java


Uno de los grandes atractivos de la programacin orientada a o#'etos es la facilidad que nos ofrece para la reutilizacin de cdigo. ,a programacin puede llegar a ser muy repetitiva. ,a reutilizacin de cdigo consiste en no volver a escri#ir una y otra vez los mismos algoritmos para resolver situaciones similares. ,a clave para conseguir esto en +ava va a ser la herencia. "i alguna vez ha tratado de reutilizar un cdigo ya escrito para tratar de modificar su comportamiento, ha#rs compro#ado lo comple'o que resulta y cmo es muy frecuente cometer errores. Neamos un e'emplo! )magina que tienes que dispones de un sistema de informacin geogrfica donde cada punto geogrfico es representado por

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!

Materia( comp(ementario: Sobrecarga en Java


=90&. Este apartado no es esencial para el desarrollo del curso. 'i no dispones de tiempo puedes saltrtelo. +ava permite varias versiones de un mismo m&todo, siempre que cam#ien entre s- los parmetros. Es decir dispondremos de dos m&todos distintos con un mismo nom#re. +ava los diferenciar al tener parmetros diferentes. Esta forma de tra#a'ar se conoce como so#recarga.

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

public void suma+double re, 3 real ( real ? re; 7

=. Bodifica la clase rincipal.'ava para que se usen estos m&todos.

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.

Materia( comp(ementario: 0o(i1ormismo en Java

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.

0KC10"?A" 2OO2@0 /OC"

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 material que se ha preparado para esta unidad[


Balo $egular Cueno E@celente

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.

Bdulo 1! ;ise.o de la interfaz de usuario! Nistas y ,ayouts

)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

Creacin de una inter1a7 de usuario por cdigo


Neamos un primer e'emplo de cmo crear una interfaz de usuario utilizando e@clusivamente cdigo. Esta no es la forma recomenda#le de tra#a'ar con Android, sin em#argo resulta interesante para discutir algunos conceptos.

Ejercicio paso a paso! CreaciFn del inter(aL de usuario por


cFdi'o 2. A#re el proyecto creado en el cap-tulo anterior y visualiza %ola"undo.ja&a. 1. :omenta la (ltima sentencia del programa y a.ade las tres que se muestran a continuacin en negrita!
"Override public void onCreate+/undle savedInstance>tate, 3 super!onCreate+savedInstance>tate,; //setContentNiew+0!layout!activityHmain,; 'e(t)iew te(to * ne' 'e(t)iew(t0is ! te(to.set'e(t(" ello" Android" ! setContent)iew(te(to ! 7

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.