manual programacion android sgolivernet v3

Upload: apolo-osx

Post on 05-Nov-2015

95 views

Category:

Documents


13 download

DESCRIPTION

Manual en Word

TRANSCRIPT

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    1/52

    anual Programacin Android

    Salvador Gmez Oliver

    WW W . GOLIVER.NET

    Versin 3.0

    http://www.sgoliver.net/http://www.sgoliver.net/
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    2/52

    Versin 3.0 // Junio 2013

    Este curso tambin est disponible online.

    Es posible que exista una versin ms reciente de este documento o que puedas

    encontrar contenido webactualizado.Para ms informacin te recomiendo que visites la web ocial del curso:

    http:ww w .s!olive r .netblo!"pa!e#id$%&'(

    2013 - Salvador Gmez

    OliverTodos los derechos

    reservados.

    http://www.sgoliver.net/blog/%3Fpage_id%3D2935%0Dhttp://www.sgoliver.net/blog/%3Fpage_id%3D2935%0D
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    3/52

    )*+),E +E ,-*E*)+-/P01 2 -3- 45 6 78)9* 6 +)0)3)+- E/E 2);0-"

    ,hecBboxes = 0adio;uttons

    ((2istas +esple!ables(@2istas4%-ptimizacin de listas4

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    4/52

    ,ontroles personalizados: Extender controlesC4

    III. Widgets

    Fid!ets bsicos>>% Fid!ets avanzados

    >>4

    IV. Mens

    GenHs = /ubmenHs bsicos> % '> -pciones avanzadas de menH> '4

    V. Tratamiento deXML

    ratamiento de IG2 con /6I>?' ratamiento de IG2 con /6I /implicado>(> ratamiento de IG2 con +-G

    >(? ratamiento de IG2 con ImlPull>(@ 6lternativas para leerescribir IG2 J= otros cherosK>4C

    http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark15http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark15http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark15http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark16http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark16http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark16http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark17http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark17http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark17http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark18http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark18http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark18http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark19http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark19http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark19http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark20http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark20http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark20http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark21http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark21http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark21http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark21http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark21http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark22http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark22http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark22http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark23http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark23http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark23http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark23http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark23http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark24http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark24http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark24http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark24http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark25http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark25http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark25http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark25http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark26http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark26http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark26http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark26http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark26http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark27http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark27http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark27http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark28http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark28http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark28http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark29http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark29http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark29http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark30http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark30http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark30http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark30http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark15http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark15http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark15http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark16http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark16http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark16http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark17http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark17http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark17http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark18http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark18http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark18http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark19http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark19http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark19http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark20http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark20http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark20http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark21http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark21http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark21http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark21http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark21http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark22http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark22http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark22http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark23http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark23http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark23http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark23http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark23http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark24http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark24http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark24http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark25http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark25http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark25http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark26http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark26http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark26http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark26http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark26http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark27http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark27http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark27http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark28http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark28http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark28http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark29http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark29http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark29http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark30http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark30http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark30
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    5/52

    VI. Bases deDatos

    Primeros pasos con /72ite> 4 ( )nsertar6ctualizarEliminar re!istros de la ;+

    > < C ,onsultar 0 ecuperar re!istros de la ;+>< %

    VII. Preferencias enndroid

    Preferencias ,ompartidas

    > < 4 Pantallas de Preferencias> < @

    !III" Localizaci#n$eogr%ca

    2ocalizacin 3eo!rca ;sica>@@Profundizando en la 2ocalizacin 3eo!rca>&'

    IX. Mapas enndroid

    Preparativos = eLemplo bsico% C C -pciones !enerales del mapa

    %>C EventosA marcadores = dibuLo sobre el mapa%>(

    X. &ic'eros enndroid

    icheros en Gemoria )nterna% % ' icheros en Gemoria Externa J arLeta / + K

    % % 4

    XI. ContentPro(iders

    http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark31http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark31http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark31http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark31http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark31http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark32http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark32http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark32http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark33http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark33http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark33http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark34http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark34http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark34http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark34http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark34http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark35http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark35http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark35http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark35http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark36http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark36http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark36http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark36http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark36http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark37http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark37http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark37http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark38http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark38http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark38http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark38http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark38http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark39http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark39http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark39http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark40http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark40http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark40http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark41http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark41http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark41http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark41http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark41http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark42http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark42http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark42http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark42http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark43http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark43http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark31http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark31http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark31http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark31http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark31http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark32http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark32http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark32http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark33http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark33http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark33http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark34http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark34http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark34http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark34http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark34http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark35http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark35http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark35http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark36http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark36http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark36http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark36http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark36http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark37http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark37http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark37http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark38http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark38http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark38http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark38http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark38http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark39http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark39http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark39http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark40http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark40http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark40http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark41http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark41http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark41http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark41http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark41http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark42http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark42http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark42http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark43http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark43
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    6/52

    ,onstru c cin de ,ontent Providers% '>8tilizacin de ,ontent Providers% '&

    XII" )oti%cacionesndroid

    *oticaciones oast%?( *oticaciones de la ;arra de Estado%?& ,uadros de +ilo!o% ( >

    XIII. Tareas en *egundoPlano

    Milos = areas 6sNncronas Jhread = 6s=nc asBK% ( &)ntent/ervice%44

    XIV. cceso a *er(iciosWe+

    /ervicios F eb / - 6P: /ervidor% < > /ervicios F eb / - 6P: ,liente% < & /ervicios F eb 0E/ : /ervidor

    %&C /ervicios F eb 0E/ : ,liente%&

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    7/52

    X!" )oti%cacionesPus'

    )ntrodu c cin a 3oo!le ,loud Gessa!in!'C4 )mplementacin del /ervidor

    '>C )mplementacin del ,liente 6ndroid'>4

    X!I" Depuraci#n enndroid

    2o!!in! en 6ndroid

    ' % (

    http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark54http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark54http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark54http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark54http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark54http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark55http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark55http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark55http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark55http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark55http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark56http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark56http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark56http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark56http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark56http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark57http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark57http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark57http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark57http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark57http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark54http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark54http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark54http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark54http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark54http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark55http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark55http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark55http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark56http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark56http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark56http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark57http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark57http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark57http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark57http://var/www/apps/conversion/tmp/scratch_7/HYPERLINK%23bookmark57
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    8/525

    P,-L.$.

    Ma= pro=ectos que se comienzan sin saber mu= bien el rumbo exacto que setomarA ni el destino que se pretende alcanzar. Pro=ectos cu=o Hnico impulso es eldNa a dNaA sin planesA sin re!lasA tan solo con el entusiasmo de se!uir adelanteA aveces con !anasA a veces sin fuerzasA pero siempre con la intuicin de que va a salirbien.

    El papel baLo estas lNneas es uno de esos pro=ectos. *aci casi de la casualidad allpor %C>C. Mo=A varios aDos despusA si!ue ms vivo que nunca.

    6 pesar de llevar metido en el desarrollo para 6ndroid casi desde sus iniciosA enmi blo! Os!olive r .net nunca habNa tratado estos temasA pretendNa mantenerme el asu temtica ori!inal: el desarrollo baLo las plataformas Qava = .*E. /ur!ieron en al!Hnmomento al!unos escarceos con otros len!uaLesA pero siempre con un oLo puesto enlos dos primeros.

    Gi formacin en 6ndroid fue en in!ls. *o habNa alternativaA era el Hnico idioma

    en el queA por aquel entoncesA existNa buena documentacin sobre la plataforma.+esde el primer concepto hasta el Hltimo tuve que aprenderlo en el idioma de/haBespeare. 6 dNa de ho= esto no ha cambiado muchoA la buena documentacinsobre 6ndroidA la buena de verdadA si!ue = se!uir aHn durante al!Hn tiempoestando en in!lsA pero afortunadamente son =a muchas las personas de hablahispana las que se estn ocupando de ir equilibrando poco a poco esta balanza deidiomas.

    R con ese afn de aportar un pequeDo !ranito de arena a la comunidadhispanohablante es como acab decidiendo dar un !iroA quien sabe si temporal opermanenteA a mi blo! = comenzar a escribir sobre desarrollo para la plataforma6ndroid. *o sabNa hasta dnde iba a lle!arA no sabNa la aceptacin que tendrNaA pero

    lo que sN sabNa es que me apetecNa a=udar un poco a los que como =o les costabaencontrar informacin bsicasobre 6ndroid disponible en su idioma.

    Mo=A !racias a todo vuestro apo=oA vuestra colaboracinA vuestras propuestasA =vuestras crNticas Jde todo se aprendeK ste es un pro=ecto con varios aDos =a de vida.Gs de 'CC p!inasA ms de (C artNculosA = sobre todo cientos de comentarios denimo recibidos.

    R este documento no es un nalA es slo un punto = se!uido. Este libro es tan solo lameLor forma que he encontrado de mirar atrsA ordenar ideasA = pensar en elsi!uiente camino a tomarA que espero sea lar!o. Espero que muchos de vosotros meacompaDis en parte de ese camino i!ual que lo habis hecho en el recorrido hasta

    ahora.

    Guchas !raciasA = que comience elespectculo.

    http://www.sgoliver.net/http://www.sgoliver.net/
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    9/525

    / 0UI1) ! DI,I$ID. 2*T2LIB,.3

    Este manual va diri!ido a todas aquellas personas interesadas en un tema tan en au!ecomo la pro!ramacin de aplicaciones mviles para la plataforma 6ndroid. /etratarn temas dedicados a la construccin deaplicaciones nativas de la plataformaAdeLando a un lado por el momento las aplicaciones web. Es por ello por lo que elHnico requisito indispensable a la hora de utilizar este manual es tenerconocimientos bien asentados sobre el len!uaLe de pro!ramacin Qava = ciertasnociones sobre aspectos bsicos del desarrollo actual como la orientacin a obLetos.

    LIC2)CI

    S *al(ador $#mez .li(er" odos losderechos reservados.

    7ueda prohibida la reproduccin total o parcial de este documentoA asN como suuso = difusinA sin elconsentimiento previo de suautor.

    Por favorA respeta los derechos de autor. /i quieres emplear al!uno de los textoso im!enes de este documento puedes solicitarlo por correo electrnico a lasi!uiente direccin: s!oliver.net T !mail.com

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    10/5

    1Conceptos Bsicos

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    11/5

    9

    I. ,onceptos ;sicos

    2ntorno de desarrollondroid

    En este apartado vamos a describir los pasos bsicos para disponer en nuestroP, del entorno = lasherramientas necesarias para comenzar a pro!ramar aplicaciones para laplataforma 6ndroid.

    *o vo= a ser exhaustivoA =a existen mu= buenos tutoriales sobre la instalacin deEclipse = 6ndroidA incluida la documentacin ocial de la plataforma. 6demsA si haslle!ado hasta aquN quiero suponer que tienes unos conocimientos bsicos de Eclipse =

    QavaA por lo que tan slo enumerar los pasos necesarios de instalacin =con!uracinA = proporcionar los enlaces a las distintas herramientas. amos all.

    Paso 1. Descarga einstalacin de Java.

    /i aHn no tienes instalado nin!una versin del Q+U JJava Development KitK puedesdescar!ar la Hltima versindesde la web de-racle.

    En el momento de escribir este manual la versin ms reciente disponible es la OEclipseQuno /0> en la Hltima revisin de este textoA desde este enlac e. 0ecomiendodescar!ar la versin Eclipse IDE for Java DevelopersA = por supuesto descar!ar laversin apropiada para tu sistema operativo JFindowsGac -/2inuxA = '%4? bitsK.+urante el curso siempre utilizar Findows 4? bits.

    2a instalacin consiste simplemente en descomprimir el zip descar!ado en la

    ubicacin deseada. Para eLecutarlo accederemos al chero eclipse.exe dentro de laruta donde ha=amos descomprimido la aplicacinA por eLemploc:\eclipse\eclipse.exe. +urante la primera eLecucin de la aplicacin nospre!untar cul ser la carpeta donde queremos almacenar nuestros pro=ectos.)ndicaremos la ruta deseada = marcaremos la checB VUse this as the defaultV para queno vuelva a pre!untarlo.

    Paso 3. Descargar el SDKde Android.

    El /+U de la plataforma 6ndroid se puede descar!ar desde aquN Jen el momento derevisar este texto la Hltima versin es la r%>A que funciona perfectamente conEclipse ?.%.>K. 8na vez descar!adoA bastar con eLecutar el instalador estndar deFindows.

    http://www.eclipse.org/downloads/http://developer.android.com/sdk/index.htmlhttp://developer.android.com/sdk/index.htmlhttp://www.eclipse.org/downloads/http://developer.android.com/sdk/index.html
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    14/5

    10

    Paso 4. Descargar el plugin deAndroid para Eclipse.

    3oo!le pone a disposicin de los desarrolladores un plu!in para Eclipse llamadoAndroid Development Tools J6+K que facilita en !ran medida el desarrollo deaplicaciones para la plataforma. Podis descar!arlo

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    15/5

    11

    mediante las opciones de actualizacin de EclipseA accediendo al menH VHelp /Install new softwareV eindicando la si!uiente 802 de descar!a:

    https://dl-ssl.google.com/android/eclipse/

    /eleccionaremos los dos paquetes disponibles VDeveloper ToolsV = VNDK lu!insV =pulsaremos el botn VNe"t#V para comenzar con el asistente de instalacin.

    +urante la instalacin Eclipse te pedir que aceptes la licencia de los componentesde 3oo!le que vas a instalar = es posible que aparezca al!Hn mensaLe de warnin! quesimplemente puedes aceptar para continuar con la instalacin. inalmente el

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    16/5

    11

    instalador te pedir que reinicies Eclipse.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    17/5

    17

    Paso 5. Congurar elplugin AD!.

    8na vez instalado el plu!inA tendremos que con!urarlo indicando la ruta en la quehemos instalado el /+U de 6ndroid. Para elloA iremos a la ventana de con!uracinde Eclipse JFindow PreferencesWKA = en la seccin de 6ndroid indicaremos la rutaen la que se ha instalado. inalmente pulsaremos -U para aceptar los cambios. /i

    aparece al!Hn mensaLe de warnin! aceptamos sin msA =a que se son problemasque se solucionarn en el si!uiente paso.

    Paso ". #nstalar las Plat$or% !ools & losPlat$or%s necesarios.

    6dems del /+U de 6ndroid comentado en el paso %A que contiene las herramientasbsicas para desarrollar en 6ndroidA tambin deberemos descar!ar las llamadaslat$orm ToolsA que contiene herramientas especNcas de la Hltima versin de laplataformaA = una o varias plataformas J%DK latformsK de 6ndroidA que no son msque las librerNas necesarias para desarrollar sobre cada una de las versiones

    concretas de 6ndroid. 6sNA si queremos desarrollar por eLemplo para 6ndroid %.%tendremos que descar!ar su plataforma correspondiente. Gi conseLo personal essiempre instalar al menos % plataformas: la correspondiente a la Hltima versindisponible de 6ndroidA = la correspondiente a la mNnima versin de 6ndroid quequeremos que soporte nuestra aplicacin.

    Para elloA desde Eclipse debemos acceder al menH V&indow / Android %DK 'ana!erV.En la lista de paquetesdisponibles seleccionaremos las V6ndroid /+U PlatformXtoolsVAlas plataformas VAndroid ()* +AI ,-.V = VAndroid *)* +AI .VA = el paquete extraVAndroid %upport 0i1rar2VA que es una librerNa que nos permitir utilizar en versionesanti!uas de 6ndroid caracterNsticas introducidas por versiones ms recientes.Pulsaremos el botn VInstall pac3a!esV = esperaremos a que nalice la descar!a.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    18/52

    Paso '. Congurarun A(D.

    6 la hora de probar = depurar aplicaciones 6ndroid no tendremos que hacerlonecesariamente sobre un dispositivo fNsicoA sino que podremos con!urar unemulador o dispositivo virtual JAndroid 4irtual DeviceA o 6+K donde poder realizarfcilmente estas tareas. Para elloA accederemos al 6+ Gana!er JmenH Findow 6+Gana!erKA = en la seccin 4irtual Devices podremos aDadir tantos 6+ como senecesiten Jpor eLemploA con!urados para distintas versiones de 6ndroid o distintostipos de dispositivoK. *uevamenteA mi conseLo ser con!urar al menos dos 6+A unopara la mNnima versin de 6ndroid que queramos soportarA = otro para la versin ms

    reciente disponible.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    19/52

    Para con!urar el 6+ tan slo tendremos que indicar un nombre descriptivoA laversin de la plataforma 6ndroid que utilizarA = las caracterNsticas de hardware deldispositivo virtualA como por eLemplo su resolucin de pantalla o el tamaDo de latarLeta /+. 6demsA marcaremos la opcin V%napshotVA que nos permitir arrancar elemulador ms rpidamente en futuras eLecuciones.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    20/5

    R con este paso =a tendrNamos preparadas todas las herramientas necesarias para

    comenzar a desarrollaraplicaciones 6ndroid. En prximos apartados veremos comocrear un nuevo pro=ectoA la estructura = componentes de un pro=ecto 6ndroidA =crearemos una aplicacin sencilla para poner en prctica todos los conceptosaprendidos.

    2structura de un pro4ectondroid

    Para empezar a comprender cmo se constru=e una aplicacin 6ndroid vamos a crearun nuevo pro=ecto6ndroid en Eclipse = echaremos un vistazo a la estructura !eneral del pro=ectocreado por defecto.

    Para crear un nuevo pro=ecto abriremos Eclipse e iremos al menH ile *ew 6ndroid

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    21/5

    6pplication ProLect.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    22/5

    +e esta forma iniciaremos el asistente de creacin del pro=ectoA que nos !uiar por lasdistintas opciones de creacin = con!uracin de un nuevo pro=ecto.

    En la primera pantalla indicaremos el nombre de la aplicacinA el nombre delpro=ecto = el paquete Lava que utilizaremos en nuestras clases Lava. endremos queseleccionar adems la mNnima versin del /+U que aceptar nuestra aplicacin alser instalada en un dispositivo J'inimum 5e6uired %DKKA la versin del /+U para laque desarrollaremos JTar!et %DKKA = la versin del /+U con la que compilaremos elpro=ecto J7ompile withK. 2as dos Hltimas suelen coincidir con la versin de 6ndroidms reciente. El resto de opciones las deLaremos con los valores por defecto.

    6l pulsar el botn Ne"tA accederemos al se!undo paso del asistenteA donde tendremosque indicar si durante la creacin del nuevo pro=ecto queremos crear un icono paranuestra aplicacin J7reate custom launcher iconK = si queremos crear una actividadinicial J7reate activit2K. ambin podremos indicar si nuestro pro=ecto ser del tipo2ibrerNa J'ar3 this ro8ect as a li1rar2K. Por ahora deLaremos todas las opcionesmarcadas por defecto como se ve en la si!uiente ima!en = pulsamos Ne"t.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    23/5

    En la si!uiente pantalla del asistente con!uraremos el icono que tendr nuestraaplicacin en el dispositivo. *o nos detendremos mucho en este paso =a que no tienedemasiada relevancia por el momento. an slo decir que podremos seleccionar laima!enA texto o dibuLo predenido que aparecer en el iconoA el mar!enA la forma =los colores aplicados. Por ahora podemos deLarlo todo por defecto = avanzar alsi!uiente paso pulsando Ne"t.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    24/5

    En la si!uiente pantalla del asistente ele!iremos el tipo de 6ctividad principal de laaplicacin. Entenderemos por ahora que una actividad es una VventanaV o VpantallaVde la aplicacin. En este paso tambin deLaremos todos los valores por defectoAindicando asN que nuestra pantalla principal ser del tipo 9lan3Activit2.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    25/5

    Por HltimoA en el Hltimo paso del asistente indicaremos los datos de esta actividadprincipal que acabamos de ele!irA indicando el nombre de su clase Lava asociada =el nombre de su la2out "ml Jal!o asN como la interfaz !rca de la actividadA loveremos ms adelanteK.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    26/5

    20

    8na vez con!urado todo pulsamos el botn :inish = Eclipse crear por nosotrostoda la estructura delpro=ecto = los elementos indispensables que debe contener.

    En la si!uiente ima!en vemos los elementos creados inicialmente para un nuevopro=ecto 6ndroid:

    En los si!uientes apartados describiremos los elementos principalesde esta estructura.

    Carpeta )src)

    Esta carpeta contendr todo el cdi!o fuente de la aplicacinA cdi!o de la interfaz!rcaA clases auxiliaresA etc. )nicialmenteA Eclipse crear por nosotros el cdi!obsico de la pantalla JActivityK principal de la aplicacinA que recordemos que ennuestro caso era MainActivityA = siempre baLo la estructura del paquete Lava

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    27/5

    20

    denido.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    28/52

    28

    Carpeta )res)

    ,ontiene todos los cheros de recursos necesarios para el pro=ecto: im!enesAvNdeosA cadenas de textoA etc. 2os diferentes tipos de recursos se distribu=en entre lassi!uientes subcarpetas:

    Carpeta Descripci#n/res/drawable/ ,ontiene las im!enes O= otros elementos !rcos usados en

    por la aplicacin. Para denir diferentes recursos dependiendode la resolucin = densidad de la pantalla del dispositivo sesuele dividir en varias subcarpetas:

    /drawable-ldpi Jdensidad baLaK

    /drawable-mdpi Jdensidad mediaK

    /drawable-hdpi Jdensidad altaK

    /res/layout/ ,ontiene los cheros de definicin IG2 de las diferentespantallas de la interfaz !rca. Para denir distintos la2outsdependiendo de la orientacin del dispositivo se puede dividir endos subcarpetas:

    /layout JverticalK

    /res/anim/

    /res/animator/

    ,ontienen la denicin de las animaciones utilizadas por laaplicacin.

    /res/color/ ,ontiene cheros IG2 de denicin de colores se!Hn estado./res/menu/ ,ontiene la denicin IG2 de los menHs de la aplicacin./res/values/ ,ontiene otros cheros IG2 de recursos de la aplicacinA como

    por eLemplo cadenas de texto Jstrin!s)"mlKA estilos Jst2les)"mlKAcolores Jcolors)"mlKA arra=s de valores Jarra2s)"mlKA etc.

    /res/xml/ ,ontiene otros cheros IG2 de datos utilizados por la aplicacin./res/raw/ ,ontiene recursos adicionalesA normalmente en formato distinto a

    IG2A que no se

    *o todas estas carpetas tienen por qu aparecer en cada pro=ecto 6ndroidA tan slolas que se necesiten.)remos viendo durante el curso que tipo de elementos se pueden incluir en cada una deestas carpetas.

    ,omo eLemploA para un pro=ecto nuevo 6ndroidA se crean por defecto lossi!uientes recursos para la aplicacin:

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    29/52

    ,omo se puede observarA existen al!unas carpetas en cu=o nombre se inclu=e un

    suLo adicionalA como por eLemplo VvaluesXv>>V = VvaluesXv>?V. EstosA = otros suLosAse emplean para denir recursos independientes para determinados dispositivosse!Hn sus caracterNsticas. +e esta formaA por eLemploA los recursos incluidos en lacarpeta VvaluesXv>>V se aplicarNan tan slo a dispositivos cu=a versin de 6ndroid seala '.C J6P) >>K o superior. 6l i!ual que el suLo VYvV existen otros muchos parareferirse a otras caracterNsticas del terminalA puede consultarse la lista completa en ladocumentacin ocial del 6ndroid.

    Entre los recursos creados por defectoA cabe destacar el la=out Vactivit2;main)"mlVAque contiene la denicin de la interfaz !rca de la pantalla principal de laaplicacin. /i hacemos doble clic sobre el chero Eclipse nos mostrar esta interfazen su editor !rco Jtipo arrastrar = soltarK = como podremos comprobarA en

    principio contiene tan slo una etiqueta de texto centrada en pantalla con el mensaLeVMello ForldZV.

    http://developer.android.com/guide/topics/resources/providing-resources.htmlhttp://developer.android.com/guide/topics/resources/providing-resources.htmlhttp://developer.android.com/guide/topics/resources/providing-resources.htmlhttp://developer.android.com/guide/topics/resources/providing-resources.html
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    30/5

    +urante el curso no utilizaremos demasiado este editor !rcoA sino quemodicaremos la interfaz de nuestras pantallas manipulando directamente el cheroIG2 asociado Jal que se puede acceder pulsando

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    31/5

    sobre la pestaDa inferior derechaA Lunto la solapa V

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    32/5

    Esta clase R contendr en todo momento una serie de constantes con los )+ detodos los recursos de la aplicacin incluidos en la carpeta /res/A de forma quepodamos acceder fcilmente a estos recursos desde nuestro cdi!o a travs de estedato. 6sNA por eLemploA la constante R.drawable.iclauncher contendr el )+ de laima!en Vic;launcher)pn!V contenida en la carpeta /res/drawable/. eamos comoeLemplo la clase 0 creada por defecto para un pro=ecto nuevo:

    pac!age net.sgoliver.android.holausuario"

    public #inal class R $public static #inal class attr $%public static #inal class drawable $

    public static #inal int iclauncher&'x(#')'''*"%public static #inal class id $

    public static #inal int menusettings&'x(#'(''''"%public static #inal class layout $

    public static #inal int activitymain&'x(#'+''''"%public static #inal class menu $

    public static #inal int activitymain&'x(#',''''"%public static #inal class string $

    public static #inal int appname&'x(#'''''"public static #inal int helloworld&'x(#''''*"public static #inal intmenusettings&'x(#'''')"

    %public static #inal class style $

    /ase application theme0 dependent on A12 level. 3his theme is replacedby Appase3heme #rom res/values-v44/styles.xml on newer devices.

    3heme customi5ations available in newer A12 levels can go inres/values-v44/styles.xml0 while customi5ations related tobac!ward-compatibility can go here.

    ase application theme #or A12 **6. 3his theme completely replacesAppase3heme #rom res/values/styles.xml on A12 **6 devices.

    A12 ** theme customi5ations can go here.

    ase application theme #or A12 *6. 3his theme completely replacesAppase3heme #rom 738 res/values/styles.xml andres/values-v**/styles.xml on A12 *6 devices.

    A12 * theme customi5ations can go here./

    public static #inal int Appase3heme&'x(#'9''''"/ Application theme.

    All customi5ations that are 73 speci#ic to a particular A12-level can gohere.

    /public static #inal int App3heme&'x(#'9'''*"%

    %

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    33/5

    Carpeta)assets)

    ,ontiene todos los dems cheros auxiliares necesarios para la aplicacin J= que seincluirn en su propio paqueteKA como por eLemplo cheros de con!uracinA de datosAetc.

    2a diferencia entre los recursos incluidos en la carpeta /res/raw/ = los incluidos en lacarpeta /assets/ es que para los primeros se !enerar un )+ en la clase R = sedeber acceder a ellos con los diferentes mtodos de acceso a recursos. Para losse!undos sin embar!o no se !enerarn )+ = se podr acceder a ellos por su ruta comoa cualquier otro chero del sistema. 8saremos uno u otro se!Hn las necesidades denuestra aplicacin.

    Carpeta )*in)

    9sta es otra de sas carpetas que en principio no tendremos por qu tocar.,ontienelos elementos compiladosde la aplicacin = otros cheros auxiliares. ,abe destacar elchero con extensin V.apBVA que es el eLecutable de la aplicacin que se instalar enel dispositivo.

    Carpeta

    )li*s)

    ,ontendr las librerNas auxiliaresA normalmente en formato V.LarV que utilicemos ennuestra aplicacin6ndroid.

    +ic,eroAndroid-ani$est.%l

    ,ontiene la denicin en IG2 de los aspectos principales de la aplicacinA como poreLemplo su identicacin JnombreA versinA iconoA WKA sus componentes JpantallasAmensaLesA WKA las librerNas auxiliares utilizadasA o los permisos necesarios para sueLecucin. eremos ms adelante ms detalles de este chero.

    R con esto todos los elementos principales de un pro=ecto 6ndroid. *o pierdas devista este pro=ecto de eLemplo que hemos creado =a que lo utilizaremos en brevecomo base para crear nuestra primera aplicacin. Pero antesA en el si!uienteapartado hablaremos de los componentes software principales con los quepodemos construir una aplicacin 6ndroid.

    Componentes de una aplicaci#nndroid

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    34/5

    En el apartado anterior vimos la estructura de un pro=ecto 6ndroid = aprendimosdnde colocar cada uno de los elementos que componen una aplicacinA tantoelementos de software como recursos !rcos o de datos. En ste nuevo postvamos a centrarnos especNcamente en los primerosA es decirA veremos los distintostipos de componentes de software con los que podremos construir una aplicacin6ndroid.

    En Qava o .*E estamos acostumbrados a maneLar conceptos como ventanaA controlAeventos o servicioscomo los elementos bsicos en la construccin deuna aplicacin.

    Pues bienA en 6ndroid vamos a disponer de esos mismos elementos bsicos aunquecon un pequeDo cambio en la terminolo!Na = el enfoque. 0epasemos los componentesprincipales que pueden formar parte de una aplicacin 6ndroid OPor claridadA = paraevitar confusiones al consultar documentacin en in!lsA intentar traducir lo menosposible los nombres ori!inales de los componentes.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    35/5

    Activit&

    2as actividades JactivitiesK representan el componente principal de la interfaz!rca de una aplicacin 6ndroid. /e puede pensar en una actividad como elelemento anlo!o a una ventana o pantalla en cualquier otro len!uaLe visual.

    (ie/

    2as vistas JviewK son los componentes bsicos con los que se constru=e la interfaz!rca de la aplicacinA anlo!o por eLemplo a los controles de Qava o .*E. +e inicioA6ndroid pone a nuestra disposicin una !ran cantidad de controles bsicosA comocuadros de textoA botonesA listas desple!ables o im!enesA aunque tambin existe laposibilidad de extender la funcionalidad de estos controles bsicos o crear nuestrospropios controles personalizados.

    Service

    2os servicios son componentes sin interfaz !rca que se eLecutan en se!undoplano. En conceptoA son similares a los servicios presentes en cualquier otro sistemaoperativo. 2os servicios pueden realizar cualquier tipo de accionesA por eLemploactualizar datosA lanzar noticacionesA o incluso mostrar elementos visuales Jp.eL.actividadesK si se necesita en al!Hn momento la interaccin con del usuario.

    ContentProvider

    8n content provider es el mecanismo que se ha denido en 6ndroid para compartirdatos entre aplicaciones. Gediante estos componentes es posible compartirdeterminados datos de nuestra aplicacin sin mostrar detalles sobre su

    almacenamiento internoA su estructuraA o su implementacin. +e la misma formaAnuestra aplicacin podr acceder a los datos de otra a travs de los content providerque se ha=an denido.

    0roadcasteceiver

    8n 1roadcast receiver es un componente destinado a detectar = reaccionar antedeterminados mensaLeso eventos !lobales !enerados por el sistema Jpor eLemplo:V;aterNa baLaVA V/G/ recibidoVA VarLeta /+ insertadaVA WK o por otras aplicacionesJcualquier aplicacin puede !enerar mensaLes JintentsA en terminolo!Na 6ndroidKbroadcastA es decirA no diri!idos a una aplicacin concreta sino a cualquiera que quiera

    escucharloK.2idget

    2os wid!ets son elementos visualesA normalmente interactivosA que pueden mostrarseen la pantalla principal Jhome screenK del dispositivo 6ndroid = recibir actualizacionesperidicas. Permiten mostrar informacin de la aplicacin al usuario directamentesobre la pantalla principal.

    #ntent

    8n intent es el elemento bsico de comunicacin entre los distintos componentes6ndroid que hemosdescrito anteriormente. /e pueden entender como los mensaLeso peticiones que son enviados entre los distintos componentes de una aplicacin o

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    36/5

    entre distintas aplicaciones. Gediante un intent se puede mostraruna actividad desdecualquier otraA iniciar un servicioA enviar un mensaLe 1roadcastA iniciar otraaplicacinA etc.

    En el si!uiente apartado empezaremos =a a aDadir = modicar al!o de cdi!oAanalizando al detalle unaaplicacin

    sencilla.

    Desarrollando una aplicaci#n ndroidsencilla

    +espus de instalar nuestro entorno de desarrollo para 6ndroid = comentar laestructura bsica de un pro=ecto = los diferentes componentes software quepodemos utilizar =a es hora de empezar a escribir al!o de cdi!o. R como siempre lomeLor es empezar por escribir una aplicacin sencilla.

    En un principio me plante analizar en este capNtulo el clsico Hola 'undo pero ms

    tarde me pareci que

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    37/5

    se iban a quedar al!unas cosas bsicas en el tintero. 6sN que he versionado a mimanera el Hola 'undotransformndolo en al!o asN como un Hola UsuarioA que esi!ual de sencilla pero aDade un par de cosas interesantes de contar. 2a aplicacinconstar de dos pantallasA por un lado la pantalla principal que solicitar un nombre alusuario = una se!unda pantalla en la que se mostrar un mensaLe personalizado parael usuario. 6sN de sencillo e inHtilA pero aprenderemos muchos conceptos bsicosA quepara empezar no est mal.

    Por dibuLarlo para entender meLor lo que queremos conse!uirA serNa al!o tansencillo como lo si!uiente:

    amos a partir del pro=ecto de eLemplo que creamos en un apartado anteriorA al quecasualmente llamamos HolaUsuario. ,omo =a vimos Eclipse habNa creado por nosotrosla estructura de carpetas del pro=ecto = todos los cheros necesarios de un Hola'undo bsicoA es decirA una sola pantalla donde se muestra Hnicamente un mensaLeLo.

    2o primero que vamos a hacer es diseDar nuestra pantalla principal modicando laque Eclipse nos ha creado por defecto. 6unque =a lo hemos comentado de pasadaArecordemos dnde = cmo se dene cada pantalla de la aplicacin. En 6ndroidA eldiseDo = la l!ica de una pantalla estn separados en dos cheros distintos. Por unladoA en el chero /res/layout/activitymain.xml tendremos el diseDo puramentevisual de la pantalla denido como chero IG2 = por otro ladoA en el chero/src/pa;uete.java/ MainActivity.javaA encontraremos el cdi!o Lava quedetermina la l!ica de la pantalla.

    amos a modicar en primer lu!ar el aspecto de la ventana principal de la aplicacinaDadiendo los controles JviewsK que vemos en el esquema mostrado al principio delapartado. Para elloA vamos a sustituir el contenido del chero activitymain.xml porel si!uiente:

    http://schemas.android.com/ap!/res/android>

    xmlns:tools&>http://schemas.android.com/tools> android:id&>?6id/=inear=ayout*>android:layoutwidth&>matchparent>android:layoutheight&>matchparent>android:orientation&>vertical> @

    ?6id/=blombre>android:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent>android:text&>?string/nombre> /@

    ?6id/3xtombre>android:layoutwidth&>matchparent>android:layoutheight&>wrapcontent>

    http://schemas.android.com/apk/res/androidhttp://schemas.android.com/toolshttp://schemas.android.com/apk/res/androidhttp://schemas.android.com/tools
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    38/52

    android:input3ype&>text> /@

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    39/52

    ?6id/tn8ola>android:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent>android:text&>?string/hola> /@

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    40/5

    android:id&>?6id/=blombre>android:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent>android:text&>Bscribre tu nombre:> /@

    R la se!unda alternativaA la utilizada en el eLemploA consistirNa en denir primero una

    nueva cadena de texto en el chero de recursos /res/values/strings.xmlA poreLemplo con identicador VnombreV = valor VBscribe tu nombre:V

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    41/5

    @Bscribe tu nombre:wrapcontent>android:layoutheight&>wrapcontent>android:text&>?string/nombre> /@

    Esta se!unda alternativa nos permite tener perfectamente localizadas = a!rupadastodas las cadenas de texto utilizadas en la aplicacinA lo que nos podrNa facilitar poreLemplo la traduccin de la aplicacin a otro idioma.,on esto =a tenemos denida lapresentacin visual de nuestra ventana principal de la aplicacin. +e i!ual formadeniremos la interfaz de la se!unda pantallaA creando un nuevo chero llamadoactivitysaludo.xmlA = aDadiendo esta vez tan solo una etiqueta J3extiewK paramostrar el mensaLe personalizado al usuario.

    Para aDadir el cheroA pulsaremos el botn derecho del ratn sobre la carpeta derecursos /res/layout = pulsaremos la opcin VNew Android ='0 >leV.

    En el cuadro de dilo!o que nos aparece indicaremos como tipo de recurso V0a2outVA

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    42/5

    indicaremos el nombre

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    43/5

    30

    del chero Jcon extensin V.xmlVK = como elemento raNz seleccionaremos=inear=ayout. inalmentepulsamos :inish para crear el chero.

    Eclipse crear entonces el nuevo chero = lo abrir en el editor !rcoA aunque como=a indicamosA nosotros accederemos a la solapa de cdi!o para modicardirectamente el contenido IG2 del chero.

    Para esta se!unda pantalla el cdi!o que incluirNamos serNa el si!uiente:

    *.'> encoding&>ut#-D>C@http://schemas.android.com/ap!/res/android>

    android:layoutwidth&>matchparent>android:layoutheight&>matchparent>android:orientation&>vertical> @

    ?6id/3xtEaludo>android:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent>android:text&>> /@

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    44/5

    30

    8na vez denida la interfaz de las pantallas de la aplicacin deberemos implementar lal!ica de la misma.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    45/5

    45

    ,omo =a hemos comentadoA la l!ica de la aplicacin se denir en cheros Lavaindependientes. Para la pantalla principal =a tenemos creado un chero por defectollamado MainActivity.java. Empecemospor comentar su cdi!o por defecto:

    pac!age net.sgoliver.android.holausuario"

    import android.os.undle"import android.app.Activity"import android.view.Menu"

    public class MainActivity extends Activity $

    ?7verridepublic void onFreateGundle saved2nstanceEtateH

    $ super.onFreateGsaved2nstanceEtateH"setFontentiewGR.layout.activitymainH"

    %

    ?7verride

    public boolean onFreate7ptionsMenuGMenu menuH $getMenu2n#laterGH.in#lateGR.menu.activitymain0 menuH"return true"

    %%

    ,omo =a vimos en un apartado anteriorA las diferentes pantallas de unaaplicacin6ndroid se denen mediante obLetos de tipo Activity. Por tantoA lo primeroque encontramos en nuestro chero Lava es la denicin de una nueva claseMainActivity que extiende a Activity. El Hnico mtodo que modicaremos de estaclase ser el mtodo 7nFreateGHA llamado cuando se crea por primera vez laactividad. En este mtodo lo Hnico que encontramos en principioA adems de la

    llamada a su implementacin en la clase padreA es la llamada al mtodosetFontentiewGR.layout.activitymainH. ,on esta llamadaestaremos indicandoa 6ndroid que debe establecer como interfaz !rca de esta actividad la denida en elrecurso R.layout.activitymainA que no es ms que la que hemos especicado enel chero /res/ layout/activitymain.xml. 8na vez ms vemos la utilidad de lasdiferentes constantes de recursos creadas automticamente en la clase R al compilarel pro=ecto.

    6dems del mtodo onFreateGHA vemos que tambin se sobrescribe el mtodoonFreate7ptionsMenuGHA que se utiliza para denir menHs en la aplicacin. Por elmomento no tocaremos este mtodoA ms adelante en el curso nos ocuparemos deeste tema.

    6hora vamos a crear una nueva actividad para la se!unda pantalla de la aplicacinanlo!a a sta primeraA para lo que crearemos una nueva clase IrmEaludo queextienda tambin de Activity = que implemente el mtodo onFreateGH peroindicando esta vez que utilice la interfaz denida para la se!unda pantalla enR.layout.activitysaludo.

    Para elloA pulsaremos el botn derecho sobre la carpeta /src/tu.pa;uete.java/ =seleccionaremosla opcin de menH *ew ,lass.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    46/5

    46

    En el cuadro de dilo!o que nos aparece indicaremos el nombre JNameK de la nuevaclase = su clase padre J%uperclassK como android.app.Activity.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    47/5

    Pulsaremos :inish = Eclipse crear el nuevo chero = lo abrir en el editor de

    cdi!o Lava. Godicaremos por ahora el cdi!o de la clase para que quede al!o

    anlo!o a la actividad principal:

    pac!age net.sgoliver.android.holausuario"

    import android.app.Activity"import android.os.undle"

    public class IrmEaludo extends Activity $

    ?7verrideprotected void onFreateGundle saved2nstanceEtateH $

    super.onFreateGsaved2nstanceEtateH"

    setFontentiewGR.layout.activitysaludoH"%

    %

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    48/52

    ).T: odos los pasos anteriores de creacin de una nueva pantalla Jla=out xml [clase LavaK se puede realizar tambin mediante un asistente de Eclipse al que seaccede mediante el menH contextual V*ew -therW 6ndroid 6ndroid 6ctivit=V. /inembar!oA he preferido explicarlo de esta forma para que quedaran claros todos lospasos = elementos necesarios.

    /i!amos. Por ahoraA el cdi!o incluido en estas clases lo Hnico que hace es !enerar la

    interfaz de la actividad. 6 partir de aquN nosotros tendremos que incluir el resto de lal!ica de la aplicacin.

    R vamos a empezar con la actividad principal MainActivityA obteniendo unareferencia a los diferentes controles de la interfaz que necesitemos manipularA ennuestro caso slo el cuadro de texto = el botn. Para ello utilizaremos el mtodo#indiewy2dGH indicando el )+ de cada controlA denidos como siempre en la claseR. odo esto lo haremos dentro del mtodo onFreateGH de la clase MainActivityA

    Lusto a continuacin de la llamada a setFontentiewGH que =a comentamos:

    . . .

    import android.view.iew"import android.view.iew.7nFlic!=istener"import android.widget.utton"import android.widget.Bdit3ext"

    . . .

    public class MainActivity extends Activity $

    ?7verridepublic void onFreateGundle saved2nstanceEtateH

    $ super.onFreateGsaved2nstanceEtateH"

    setFontentiewGR.layout.activitymainH"

    //7btenemos una re#erencia a los controles de la inter#a5#inal Bdit3ext txtombre & GBdit3extH#indiewy2dGR.id.3xtombreH"#inal utton btn8ola & GuttonH#indiewy2dGR.id.tn8olaH"

    . . .

    %%

    . . .

    ,omo vemosA hemos aDadido tambin varios import adicionales para tener accesoa todas las clases utilizadas.

    8na vez tenemos acceso a los diferentes controlesA =a slo nos queda implementarlas acciones a tomar cuando pulsemos el botn de la pantalla. Para elloA continuandoel cdi!o anteriorA = siempre dentro del mtodo onFreateGHA implementaremos elevento onFlic! de dicho botnA veamos cmo:

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    49/52

    . . .

    import android.content.2ntent"

    . . .

    public class MainActivity extends Activity $

    ?7verridepublic void onFreateGundle saved2nstanceEtateH $

    . . .

    //7btenemos una re#erencia a los controles de la inter#a5#inal Bdit3ext txtombre & GBdit3extH#indiewy2dGR.id.3xtombreH"#inal utton btn8ola & GuttonH#indiewy2dGR.id.tn8olaH"

    //2mplementamos el evento >clic!> del botJnbtn8ola.set7nFlic!=istenerGnew 7nFlic!=istenerGH $

    ?7verridepublic void onFlic!Giew vH $//Freamos el 2ntent2ntent intent &

    new 2ntentGMainActivity.this0 IrmEaludo.classH"

    //Freamos la in#ormaciJn a pasar entre actividadesundle b & new undleGH"b.putEtringG>7MRB>0 txtombre.get3extGH.toEtringGHH"

    //AKadimos la in#ormaciJn al intentintent.putBxtrasGbH"

    %%H"

    %

    //2niciamos la nueva actividadstartActivityGintentH"

    %

    . . .

    ,omo =a indicamos en el apartado anteriorA la comunicacin entre los distintoscomponentes = aplicaciones en 6ndroid se realiza mediante intentsA por lo que el

    primer paso ser crear un obLeto de este tipo. Existen varias variantes del constructorde la clase 2ntentA cada una de ellas diri!ida a unas determinadas acciones. Ennuestro caso particular vamos a utilizar el intent para llamar a una actividad desdeotra actividad de lamisma aplicacinA para lo que pasaremos a su constructor unareferencia a la propia actividad llamadora JMainActivity.thisKA = la clase de laactividad llamada JIrmMensaje.classK.

    /i quisiramos tan slo mostrar una nueva actividad =a tan slo nos quedarNa llamar astartActivityGH pasndole como parmetro el intent creado. Pero en nuestroeLemplo queremos tambin pasarle cierta informacin a la actividad llamadaAconcretamente el nombre que introduzca el usuario en el cuadro de texto de lapantalla principal. Para hacer esto vamos a crear un obLeto undleA que puedecontener una lista de pares clave?valor con toda la informacin a pasar entre lasactividades. En nuestro caso slo aDadiremosun dato de tipo Etring mediante elmtodo putEtringGclave0 valorH. ras esto aDadiremos la informacin al intent

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    50/5

    mediante el mtodo putBxtrasGbundleH.

    ,on esto hemos nalizado =a actividad principal de la aplicacinA por lo quepasaremos =a a la secundaria.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    51/5

    ,omenzaremos de forma anlo!a a la anteriorA ampliando el mtodo onFreateobteniendo las referencias a los obLetos que manipularemosA esta vez slo laetiqueta de texto. ras esto viene lo ms interesanteA debemos recuperar lainformacin pasada desde la actividad principal = asi!narla como texto de laetiqueta. Para ello accederemos en primer lu!ar al intent que ha ori!inado laactividad actual mediante el mtodo get2ntentGH = recuperaremos su informacinasociada JobLeto undleK mediante el mtodo getBxtrasGH.

    Mecho esto tan slo nos queda construir el texto de la etiqueta mediante su mtodoset3extGtextoH = recuperando el valor de nuestra clave almacenada en el obLetoundle mediante getEtringGclaveH.

    pac!age net.sgoliver.android.holausuario"

    import android.app.Activity"import android.os.undle"import android.widget.3extiew"

    public class IrmEaludo extends Activity $

    ?7verrideprotected void onFreateGundle saved2nstanceEtateH

    $ super.onFreateGsaved2nstanceEtateH"setFontentiewGR.layout.activitysaludoH"

    //=ocali5ar los controles3extiew txtEaludo & G3extiewH#indiewy2dGR.id.3xtEaludoH"

    //Recuperamos la in#ormaciJn pasada en el intentundle bundle & this.get2ntentGH.getBxtrasGH"

    //Fonstruimos el mensaje a mostrar

    txtEaludo.set3extG>8ola > 6 bundle.getEtringG>7MRB>HH"%

    %

    ,on esto hemos concluido la l!ica de las dos pantallas de nuestra aplicacin = tanslo nos queda un paso importante para nalizar nuestro desarrollo. ,omo =aindicamos en un apartado anteriorA toda aplicacin 6ndroid utiliza un chero especialen formato IG2 JAndroidMani#est.xmlK para denirA entre otras cosasA losdiferentes elementos que la componen. Por tantoA todas las actividades de nuestraaplicacin deben quedar convenientemente reco!idas en este chero. 2a actividadprincipal =a debe aparecer puesto que se cre de forma automtica al crear el nuevopro=ecto 6ndroidA por lo que debemos aDadir tan slo la se!unda.

    Para este eLemplo nos limitaremos a incluir la actividad en el IG2 medianteuna nueva etiquetapac!age&>net.sgoliver.android.holausuario>android:versionFode&>*>

    android:versioname&>*.'> @

    . . .

    http://schemas.android.com/apk/res/androidhttp://schemas.android.com/apk/res/android
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    52/5

    .MainActivity>android:label&>?string/titleactivitymain> @

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    53/5

    /@android.intent.category.=ALF8BR> /@

    ?string/titleactivitysaludo> @

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    54/5

    la pestaDa V6ndroidV seleccionaremos el pro=ecto que queremos eLecutar.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    55/5

    El resto de opciones las deLaremos por defecto = pasaremos a la pestaDa Var!etV. Enesta se!unda pestaDa podremos seleccionar el 6+ sobre el que queremos eLecutarla aplicacinA aunque suele ser prctico indicarle a Eclipse que nos pre!unte estoantes de cada eLecucinA de forma que podamos ir alternando fcilmente de 6+ sintener que volver a con!urar el perl. Para ello seleccionaremos la opcin VAlwa2s

    prompt to pic3 deviceV.

    8n poco ms abaLo en esta misma pestaDa es bueno marcar la opcin VDisa1le 9ootAnimationV para acelerarun poco el primer arranque del emuladorA = normalmentetambin suele ser necesario reducirA o meLor dicho escalarA la pantalla del emuladorde forma que podamos verlo completo en la pantalla de nuestro P,. Esto secon!ura mediante la opcin VAdditional Emulator 7ommand 0ine @ptionsVA donde en

    mi caso indicar la opcin V-scale '.(9VA aunque este valor depender de laresolucin de vuestro monitor = de la con!uracin del 6+.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    56/5

    ras esto =a podrNamos pulsar el botn V0unV para eLecutar la aplicacin en elemulador de 6ndroid. Eclipse nos pre!untar en qu dispositivo queremos eLecutar =nos mostrar dos listas. 2a primera de ellas con los dispositivos que ha=a en esemomento en funcionamiento Jpor eLemplo si =a tenNamos un emulador funcionandoK= la si!uiente con el resto de 6+s con!urados en nuestro entorno. Ele!ir en primerlu!ar el emulador con 6ndroid %.%. Es posible que la primera eLecucin se demoreunos minutosA todo depender de las posibilidades de vuestro P,A asN que paciencia.

    /i todo va bienA tras una pequeDa espera aparecer el emulador de 6ndroid = seiniciar automticamente nuestra aplicacin. Podemos probar a escribir un nombre =pulsar el botn VMolaV para comprobar si elfuncionamiento es el correcto.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    57/5

    /in cerrar este emulador podrNamos volver a eLecutar la aplicacin sobre 6ndroid ?.%seleccionando el 6+ correspondiente. +e cualquier formaA si vuestro P, no esdemasiado potente no recomiendo tener dos emuladores abiertos al mismo tiempo.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    58/52

    40

    R con esto terminamos por ahora. Espero que esta aplicacin de eLemplo os sea dea=uda para aprendertemas bsicos en el desarrollo para 6ndroidA como por eLemplola denicin de la interfaz !rcaA el cdi!o Lava necesario para acceder = manipularlos elementos de dicha interfazA = la forma de comunicar diferentes actividades de6ndroid. En los apartados si!uientes veremos al!unos de estos temas de forma

    mucho ms especNca.Puedes consultar = descar!ar el cdi!o fuente completo de esteapartado accediendo a la p!ina del curso en 3itMub:

    cursoXandroidXsrcandroidXholaXusuario

    https://github.com/sgolivernet/curso-android-src/tree/master/android-hola-usuariohttps://github.com/sgolivernet/curso-android-src/tree/master/android-hola-usuario
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    59/52

    2Interfaz de Usuario

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    60/5

    60

    II. )nterfaz de 8suario

    La4outs

    En el apartado anteriorA donde desarrollamos una sencilla aplicacin 6ndroid desdeceroA =a hicimos al!unos comentarios sobre los la2outs. ,omo =a indicamosA losla2outs son elementos no visuales destinadosa controlar la distribucinA posicin =dimensiones de los controles que se insertan en su interior. Estos componentesextienden a la clase base iewroupA como muchos otros componentescontenedoresA es decirA capaces de contener a otros controles. En el post anteriorconocimos la existencia de un tipo concreto de la=outA el =inear=ayoutA aunque6ndroid nos proporciona al!unos otros. eamos cuntos = cules.

    +ra%ea&out

    9ste es el ms simple de todos los la=outs de 6ndroid. 8n Irame=ayout colocatodos sus controles hiLos alineados con su esquina superior izquierdaA de forma quecada control quedar oculto por el control si!uiente Ja menos que ste Hltimo ten!atransparenciaK. Por elloA suele utilizarse para mostrar un Hnico control en su interiorAa modo de contenedor JplaceholderK sencillo para un slo elemento sustituibleA poreLemplo una ima!en.

    2os componentes incluidos en un Irame=ayout podrn establecer sus propiedadesandroid:layout width = android:layoutheightA que podrn tomar los valoresVmatchparentV Jpara que el control hiLo tome la dimensin de su la=out contenedorKo VwrapcontentV Jpara que el control hiLo tome la dimensin de su contenidoK.).T5 /i ests utilizando una versin de la 6P) de 6ndroid inferior a la @J6ndroid%.%KA en vez de VmatchparentV debers utilizar su equivalente V#illparentV.

    http://schemas.android.com/ap!/res/android> android:layoutwidth&>matchparent>android:layoutheight&>matchparent>@

    ?6id/3xtombre>android:layoutwidth&>matchparent>android:layoutheight&>matchparent>android:input3ype&>text> /@

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    61/5

    61

    ineara&out

    El si!uiente tipo de la=out en cuanto a nivel de compleLidad es el =inear=ayout.Este la=out apila

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    62/5

    uno tras otro todos sus elementos hiLos de forma horizontal o vertical se!Hn seestablezca su propiedadandroid:orientation.

    6l i!ual que en un Irame=ayoutA los elementos contenidos en un =inear=ayoutpueden establecer sus propiedades android:layoutwidth =

    android:layoutheight para determinar sus dimensiones dentro del la=out. Pero enel caso de un =inear=ayoutA tendremos otro parmetro con el que Lu!arA la propiedadandroid:layoutweight.

    http://schemas.android.com/ap!/res/android>android:layoutwidth&>matchparent>android:layoutheight&>matchparent>android:orientation&>vertical>@

    ?6id/3xtombre>android:layoutwidth&>matchparent>

    android:layoutheight&>matchparent> /@

    ?6id/tnAceptar>android:layoutwidth&>wrapcontent>android:layoutheight&>matchparent> /@

    *> = al

    otro un layoutweight&>)> conse!uiremos como efecto que toda la supercie della=out quede ocupada por los dos cuadros de texto = que adems el se!undo sea eldoble Jrelacin entre sus propiedades weightK de alto que el primero.

    http://schemas.android.com/ap!/res/android>android:layoutwidth&>matchparent>android:layoutheight&>matchparent>android:orientation&>vertical>@

    ?6id/3xtNato*>android:layoutwidth&>matchparent>android:layoutheight&>matchparent>android:input3ype&>text>android:layoutweight&>*> /@

    ?6id/3xtNato)>android:layoutwidth&>matchparent>android:layoutheight&>matchparent>android:input3ype&>text>android:layoutweight&>)> /@

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    63/5

    6sN puesA a pesar de la simplicidad aparente de este la=out resulta ser lo sucienteverstil como para sernosde utilidad en muchasocasiones.

    !a*lea&out

    8n 3able=ayout permite distribuir sus elementos hiLos de forma tabularA deniendolas las = columnas necesariasA = la posicin de cada componente dentro de la tabla.

    2a estructura de la tabla se dene de forma similar a como se hace en MG2A es decirAindicando las las que compondrn la tabla JobLetos 3ableRowKA = dentro de cada lalas columnas necesariasA con la salvedad de que no existe nin!Hn obLeto especial paradenir una columna Jal!o asN como un TableColumnK sino que directamenteinsertaremos los controles necesarios dentro del 3ableRow = cada componenteinsertadoJque puede ser un control sencillo o incluso otro iewroupK corresponder auna columna de la tabla. +e esta formaA el nHmero nal de las de la tabla secorresponder con el nHmero de elementos 3ableRow insertadosA = el nHmero totalde columnas quedar determinado por el nHmero de componentes de la la que mscomponentes conten!a.

    Por norma !eneralA el ancho de cada columna se corresponder con el ancho delma=or componente de dicha columnaA pero existen una serie de propiedades que nosa=udarn a modicar este comportamiento:

    android:stretchFolumns. )ndicar las columnas que pueden expandirpara absorver elespacio libre deLado por las dems columnas a la derecha dela pantalla.

    android:shrin!Folumns. )ndicar las columnas que se pueden contraer paradeLar espacio alresto de columnas que se puedan salir por la derecha de lapantalla.

    android:collapseFolumns. )ndicar las columnas de la tabla que sequieren ocultar completamente.

    odas estas propiedades del 3able=ayout pueden recibir una lista de Nndices decolumnas separados por comas JeLemplo: android:stretchFolumns&>*0)0+>K o unasterisco para indicar que debe aplicar a todas las columnas JeLemplo:android:stretchFolumns&>>K.

    -tra caracterNstica importante es la posibilidad de que una celda determinada puedaocupar el espacio de varias columnas de la tabla Janlo!o al atributo colspan deMG2K. Esto se indicar mediante la propiedad android:layoutspan del

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    64/5

    componente concreto que deber tomar dicho espacio.

    eamos un eLemplo con varios de estoselementos:

    http://schemas.android.com/ap!/res/android>

    android:layoutwidth&>matchparent>android:layoutheight&>matchparent> @

    http://schemas.android.com/apk/res/androidhttp://schemas.android.com/apk/res/android
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    65/5

    /@Felda *.)> /@Felda *.+> /@

    /@Felda ).+> /@

    )> /@Felda +.)> /@

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    66/5

    cualquier formaA salvo para con!uraciones compleLas del !rid no suele ser necesarioutilizar estas propiedades.

    ,on todo esto en cuentaA para conse!uir una distribucin equivalente a la deleLemplo anterior del3able=ayoutA necesitarNamos escribir un cdi!o como elsi!uiente:

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    67/5

    http://schemas.android.com/ap!/res/android> android:layoutwidth&>matchparent>android:layoutheight&>matchparent>android:rowFount&>)>android:columnFount&>+>android:orientation&>hori5ontal> @

    Felda *.*> /@Felda *.)> /@Felda *.+> /@

    Felda ).*> /@Felda ).)> /@Felda ).+> /@

    Felda +.*>android:layoutcolumnEpan&>)> /@

    Felda +.)> /@

    android:layoutwidth&>matchparent>android:layoutheight&>matchparent> @

    ?6id/3xtombre>android:layoutwidth&>matchparent>android:layoutheight&>wrapcontent>android:input3ype&>text> /@

    ?6id/tnAceptar>android:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent>android:layoutbelow&>?id/3xtombre>android:layoutalign1arentRight&>true> /@

    ?id/3xtombre>K = alineado a la derecha della=out padre Jandroid:layoutalign1arentRight&>true>K. 7uedarNa al!o asN:

    http://schemas.android.com/apk/res/androidhttp://schemas.android.com/apk/res/androidhttp://schemas.android.com/apk/res/androidhttp://schemas.android.com/apk/res/android
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    68/52

    6l i!ual que estas tres propiedadesA en un Relative=ayout tendremos un sinfNn depropiedades paracolocar cada control Lusto donde queramos. eamos las principalesOcreo que sus propios nombres explican perfectamente la funcin de cada una:

    Tipo Propiedades

    Posicin relativa a otro control android:layoutabove

    android:layoutbelow

    android:layoutto=e#t7#

    android:layouttoRight7#

    android:layoutalign=e#t

    android:layoutalignRight

    android:layoutalign3op

    android:layoutalignottom

    android:layoutalignaseline

    Posicin relativa al la=out padre android:layoutalign1arent=e#t

    android:layoutalign1arentRight

    android:layoutalign1arent3op

    android:layoutalign1arentottom

    android:layoutcenter8ori5ontal

    android:layoutcenterertical

    android:layoutcenter2n1arent

    -pciones de mar!en Jtambindisponibles para el resto dela=outsK

    android:layoutmargin

    android:layoutmarginottom

    android:layoutmargin3op

    android:layoutmargin=e#t

    android:layoutmarginRight

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    69/52

    -pciones de espaciado opaddin!Jtambin disponiblespara el resto de la=outsK

    android:padding

    android:paddingottom

    android:padding3op

    android:padding=e#t

    android:paddingRight

    En prximos apartados veremos otros elementoscomunes que extienden a iewroupA como poreLemplolas vistas de tipo lista J=istiewKA de tipo !ridJridiewKA = en pestaDas J3ab8ost3abOidgetK.

    Puedes consultar = descar!ar elcdi!o fuente completo de este

    apartado accediendo a la p!ina delcurso en 3itMub:

    cursoXandroidXsrcandroidXla=outs

    Boton

    es

    En el apartado anterior hemos visto los distintostipos de la2out con los que contamos en 6ndroidpara distribuir los controles de la interfaz por lapantalla del dispositivo. En los prximos apartadosvamos a hacer un repaso de los diferentescontroles que pone a nuestra disposicin laplataforma de desarrollo de este sistemaoperativo. Empezaremos con los controles ms

    bsicos = se!uiremos posteriormente con al!unosal!o ms elaborados.

    En esta primera parada sobre el tema nos vamosa centrar en los diferentes tipos de botones =cmo podemos personalizarlos. El /+U de 6ndroidnos proporciona tres tipos de botones: el clsicoJuttonKA el de tipo on/o J3oggleuttonKA = elque puede contener una ima!en J2mageuttonK.En la ima!en si!uiente vemos el aspecto pordefecto de estos tres controles.

    https://github.com/sgolivernet/curso-android-src/tree/master/android-layoutshttps://github.com/sgolivernet/curso-android-src/tree/master/android-layouts
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    70/5

    *o vamos a comentar muchosobre ellos dado que son

    controles de sobra conocidospor todosA ni vamos aenumerar todas suspropiedades porque existendecenas. 6 modo dereferenciaA a medida que losva=amos comentando irponiendo enlaces a su p!inade la documentacin ocialde 6ndroid para poderconsultar todas suspropiedades en caso de

    necesidad.

    Control0uttonO6P)

    8n control de tipo utton esel botn ms bsico quepodemos utilizar. En eleLemplo si!uiente denimosun botn con el textoVBlsameV asi!nando supropiedad android:text.6dems de esta propiedadpodrNamos utilizar muchasotras como el color defondoJandroid:bac!groundKA

    estilo de fuenteJandroid:type#aceKA colorde fuente

    Jandroid:textcolorKA tamaDo de fuenteJandroid:textEi5eKA etc.

    ?6id/tnoton*>android:text&>?string/pulsame>android:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent>/@

    http://developer.android.com/reference/android/widget/Button.htmlhttp://developer.android.com/reference/android/widget/Button.htmlhttp://developer.android.com/reference/android/widget/Button.html
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    71/5

    Control!oggle0utton O6P)

    8n control de tipo 3oggleutton es un tipo de botn que puede permanecer en dosposibles estadosA pulsadono#pulsado. En este casoA en vez de denir un slo textopara el control deniremos dosA dependiendo de su estado. 6sNA podremos asi!nar laspropiedades android:text7n = android:texto7## paradenir ambos textos.

    eamos un eLemplo acontinuacin:

    ?6id/tnoton)>android:text7n&>?string/on>android:text7##&>?string/o##>android:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent> /@

    Control#%age0utton O6P)

    En un control de tipo 2mageutton podremos denir una ima!en a mostrar en vezde un textoA para lo que deberemos asi!nar la propiedad android:src.*ormalmente asi!naremos esta propiedad con el descriptor de al!Hn recurso queha=amos incluido en la carpeta /res/drawable. 6sNA por eLemploA en nuestro casohemos incluido una ima!en llamada Vo3)pn!V por lo que haremos referencia alrecurso V?drawable/o!V. 6dicionalmenteA al tratarse de un control de tipo ima!entambin deberNamos acostumbrarnos a asi!nar la propiedadandroid:contentNescription con una descripcin textual de la ima!enA de formaque nuestra aplicacin sea lo ms accesi1le posible.

    ?6id/tnoton+>android:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent>android:contentNescription&>?string/iconoo!>android:src&>?drawable/o!> /@

    ,abe decir ademsA que aunque existe este tipo especNco de botn para im!enesAtambin es posible aDadir una ima!en a un botn normal de tipo uttonA a modo deelemento suplementario al texto. Por eLemploA si quisiramos aDadir un icono a laizquierda del texto de un botn utilizarNamos la propiedad android:drawable=e#tindicando como valor el descriptor J)+K de la ima!en que queremos mostrar:

    ?6id/tnoton9>android:text&>?string/pulsame>android:drawable=e#t&>?drawable/o!>android:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent> /@

    El botn mostrado en este caso serNasimilar a ste:

    Eventos de un*otn

    http://developer.android.com/reference/android/widget/ToggleButton.htmlhttp://developer.android.com/reference/android/widget/ImageButton.htmlhttp://developer.android.com/reference/android/widget/ToggleButton.htmlhttp://developer.android.com/reference/android/widget/ImageButton.html
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    72/5

    ,omo podis ima!inarA aunque estos controles pueden lanzar muchos otroseventosA el ms comHn de todos ellos = el que querremos capturar en la ma=orNa delas ocasiones es el evento onFlic! A que se lanza cada vez que el usuario pulsa elbotn. Para denir la l!ica de este evento tendremos que implementarla deniendoun nuevo obLeto iew.7nFlic!=istenerGH = asocindolo al botn mediante elmtodoset7nFlic!=istenerGH. 2a forma ms habitual de hacer esto es la si!uiente:

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    73/5

    0

    private utton btnoton*"

    //...

    btnoton* & GuttonH#indiewy2dGR.id.tnoton*H"

    btnoton*.set7nFlic!=istenerGnew iew.7nFlic!=istenerGH $

    public void onFlic!Giew arg'H$

    %%H"

    lblMensaje.set3extG>otJn * pulsadoP>H"

    En el caso de un botn de tipo 3oggleutton suele ser de utilidad conocer en questado ha quedado elbotn tras ser pulsadoA para lo que podemos utilizar su mtodoisFhec!edGH. En el si!uiente eLemplo se comprueba el estado del botn tras serpulsado = se realizan acciones distintas se!Hn el resultado.

    btnoton) & G3oggleuttonH#indiewy2dGR.id.tnoton)H"

    btnoton).set7nFlic!=istenerGnew iew.7nFlic!=istenerGH$ public void onFlic!Giew arg'H$

    i#Gbtnoton).isFhec!edGHHlblMensaje.set3extG>otJn ): 7>H"

    %%H"

    else lblMensaje.set3extG>otJn ): 7II>H"

    Personaliar el aspecto un *otn 6&otros controles7

    En la ima!en mostrada al principio del apartado vimos el aspecto que presentan pordefecto los tres tipos de botones disponibles. PeroA 5= si quisiramos personalizar suaspecto ms all de cambiar un poco el tipo o el color de la letra o el fondo"

    Para cambiar la forma de un botn podrNamos simplemente asi!nar una ima!en ala propiedad android:bac!groundA pero esta solucin no nos servirNa de muchoporque siempre se mostrarNa la misma ima!en incluso con el botn pulsadoA dandopoca sensacin de elemento Vclic3a1leV.

    2a solucin perfecta pasarNa por tanto por denir diferentes im!enes de fondo

    dependiendo del estado del botn. Pues bienA 6ndroid nos da total libertad para haceresto mediante el uso de selectores. 8n selector se dene mediante un chero IG2localizado en la carpeta /res/drawableA = en l se pueden establecer los diferentesvalores de una propiedad determinada de un control dependiendo de su estado.

    Por eLemploA si quisiramos dar un aspecto plano a un botn 3oggleuttonApodrNamos diseDar las im!enes necesarias para los estados VpulsadoV Jen eleLemplo toggleon.pngK = Vno pulsadoV Jen el eLemplo toggleo##.pngK = crear unselector como el si!uiente:

    *.'> encoding&>L3I-D>C@

    http://schemas.android.com/ap!/res/android>@

    #alse>

    http://schemas.android.com/apk/res/androidhttp://schemas.android.com/apk/res/android
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    74/5

    0

    android:drawable&>?drawable/toggleo##> /@true>

    android:drawable&>?drawable/toggleon> /@

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    75/5

    75

    En el cdi!o anterior vemos cmo se asi!na a cada posible estado del botn unaima!en Jun elemento drawa1leK determinada. 6sNA por eLemploA para el estadoVpulsadoV Jstatechec!ed&>true>K se asi!na la ima!en toggleon.

    Este selector lo !uardamos por eLemplo en un chero llamado togglestyle.xml = locolocamos como un recurso ms en nuestra carpeta de recursos /res/drawable.

    Mecho estoA tan slo bastarNa hacer referencia a este nuevo recurso que hemoscreado en la propiedadandroid:bac!ground delbotn:

    ?6id/tnoton>android:text7n&>?string/on>android:text7##&>?string/o##>android:padding&>*'dip>android:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent>

    android:bac!ground&>?drawable/togglestyle>/@

    En la si!uiente ima!en vemos el aspecto por defecto de un 3oggleutton JcolumnaizquierdaK = cmo haquedado nuestro 3oggleutton personalizado Jcolumna derechaK.

    En las im!enes si!uientes se muestra la aplicacin de eLemplo desarrolladaA donde sepuede comprobar el aspecto de cada uno de los tipos de botn comentados para lasversiones de 6ndroid %.x = ?.x

    Puedes consultar = descar!ar el cdi!o fuente completo de esteapartado accediendo a la p!ina del curso en 3itMub:

    cursoXandroidXsrcandroidXbotones

    https://github.com/sgolivernet/curso-android-src/tree/master/android-botoneshttps://github.com/sgolivernet/curso-android-src/tree/master/android-botones
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    76/5

    76

    Imgenes6 eti7uetas 4 cuadros de te8to

    En este apartado nos vamos a centrar en otros tres componentes bsicosimprescindibles en nuestrasaplicaciones: las im!enes J2mageiewKA las etiquetas J3extiewK = por Hltimo loscuadros de texto

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    77/5

    JBdit3extK.

    Control#%age(ie/ O6P)

    El control 2mageiew permite mostrar im!enes en la aplicacin. 2a propiedad ms

    interesante es android:srcA que permite indicar la ima!en a mostrar. *uevamenteA lonormal ser indicar como ori!en de la ima!en el identicador de un recurso denuestra carpeta /res/drawableA por eLemplo android:src&>?drawable/unaimagen>.6dems de esta propiedadA existen al!unas otras Htiles en al!unas ocasiones comolas destinadas a establecer el tamaDo mximo que puede ocupar la ima!enAandroid:maxOidth = android:max8eightA o para indicar cmo debe adaptarse laima!en al tamaDo del controlA android:scale3ype J($FB3BRA 4$FB3BRFR71Aandroid:layoutwidth&>wrapcontent>android:layoutheight&>wrapcontent>android:src&>?drawable/icon>android:contentNescription&>?string/imagenejemplo> /@

    /i en vez de establecer la ima!en a mostrar en el propio la=out IG2 de la actividadquisiramos establecerla mediante cdi!o utilizarNamos el mtodoset2mageResorceGQHA pasndole el )+ del recurso a utilizar como contenido de laima!en.

    2mageiew img & G2mageiewH#indiewy2dGR.id.2mgIotoH"img.set2mageResourceGR.drawable.iconH"

    En cuanto a posibles eventosA al i!ual que comentamos para los controles de tipobotn en el apartado anteriorA para los componentes 2mageiew tambin podrNamosimplementar su evento onFlic!A de forma idntica a la que =a vimosA aunque enestos casos suele ser menos frecuente la necesidad de capturar este evento.

    Control!et(ie/ O6P)

    El control 3extiew es otro de los clsicos en la pro!ramacin de 38)sA las etiquetas

    de textoA = se utiliza para mostrar un determinado texto al usuario. 6l i!ual que en elcaso de los botonesA el texto del control se establece mediante la propiedadandroid:text. 6 parte de esta propiedadA la naturaleza del control hace que las msinteresantes sean las que establecen el formato del texto mostradoA que al i!ual queen el caso de los botones son las si!uientes: android:bac!ground Jcolor de fondoKAandroid:textFolor Jcolor del textoKA android:textEi5e JtamaDo de la fuenteK =android:type#ace Jestilo del texto: ne!ritaA cursivaA WK.

    ?6id/=blBti;ueta>android:layoutwidth&>matchparent>android:layoutheight&>wrapcontent>android:text&>?string/escribealgo>android:bac!ground&>AAII>android:type#ace&>monospace> /@

    http://developer.android.com/reference/android/widget/ImageView.htmlhttp://developer.android.com/reference/android/widget/TextView.htmlhttp://developer.android.com/reference/android/widget/ImageView.htmlhttp://developer.android.com/reference/android/widget/TextView.html
  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    78/52

    +e i!ual formaA tambin podemos manipular estas propiedades desde nuestrocdi!o. ,omo eLemploA en el si!uiente fra!mento recuperamos el texto de unaetiqueta con get3extGHA = posteriormente le concatenamos unos nHmerosAactualizamos su contenido mediante set3extGH = le cambiamos su color de fondocon setac!groundFolorGH.

  • 5/18/2018 Manual Programacion Android SgoliverNet v3

    79/52

    #inal 3extiew lblBti;ueta & G3extiewH#indiewy2dGR.id.=blBti;uetaH"Etring texto & lblBti;ueta.get3extGH.toEtringGH"texto 6& >*)+>"lblBti;ueta.set3extGtextoH"lblBti;ueta.setac!groundFolorGFolor.=LBH"

    Control

    Edit!et O6P)

    El control Bdit3ext es el componente de edicin de texto que proporciona laplataforma 6ndroid. Permite la introduccin = edicin de texto por parte del usuarioApor lo que en tiempo de diseDo la propiedad ms interesante a establecerA ademsde su posicinA tamaDo = formatoA es el texto a mostrarA atributo android:text. Porsupuesto si no queremos que el cuadro de texto aparezca inicializado con nin!HntextoA no es necesario incluir esta propiedad en el la=out IG2. 2o que sN deb