<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8528589384944803945</id><updated>2011-11-27T16:07:48.524-08:00</updated><category term='Emulador'/><category term='Desarollo'/><title type='text'>Descargas de Apps y Juegos</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://apps-games.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://apps-games.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gabriel</name><uri>http://www.blogger.com/profile/14884294654690953722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8528589384944803945.post-3671309663626674788</id><published>2011-04-28T02:55:00.000-07:00</published><updated>2011-04-28T03:20:19.535-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Emulador'/><title type='text'>FPse para android v0.10.38</title><content type='html'>&lt;b&gt;FPse for android v0.10.38&lt;/b&gt;&lt;br /&gt;&lt;u&gt;Requirements:&lt;/u&gt; Android OS 2.2 - 2.3&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7jbqiybrXc8?hl=es&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/7jbqiybrXc8?hl=es&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;LOS ICONOS SON PERSONALIZADOS POR MI :)&lt;br /&gt;&lt;img alt="" border="0" src="http://img97.imageshack.us/img97/2350/devicepo.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" src="http://img43.imageshack.us/img43/1594/device4.png" /&gt;&lt;br /&gt;&lt;br /&gt;Create an ISO image from your favorite games and enjoy playing them on your Android phone.&lt;br /&gt;&lt;br /&gt;FPse features the following:&lt;br /&gt;-High performance&lt;br /&gt;-High compatibility&lt;br /&gt;-High sound quality&lt;br /&gt;-Real-time save states&lt;br /&gt;-Audio track emulation (using .cue files)&lt;br /&gt;-Force-feedback&lt;br /&gt;-Dynamically loadable Overlay Pads&lt;br /&gt;-Guncon emulation&lt;br /&gt;-Analog Stick emulation (using touchscreen slide)&lt;br /&gt;-Compatible with G-Sensor, Touchscreen and Hardware keys&lt;br /&gt;-Supports .img, .iso, .bin, .cue, .nrg and .Z disc image formats&lt;br /&gt;Grab and enjoy this initial release!&lt;br /&gt;&lt;br /&gt;A few tips to improve your gameplay experience:&lt;br /&gt;-Create a default configuration by setting your desired options and then selecting “Default Config Save” in the System Menu.&lt;br /&gt;-CALL, BACK, VOLUME UP/DOWN buttons can be assigned as PSone buttons but can be used is not assigned.&lt;br /&gt;-Guncon emulation requires the A and B buttons to be mapped to Hardware keys. By default: L3 = A and R3 = B.&lt;br /&gt;-SPUSync is required for proper sound quality in certain games such as MGS and FFVII.&lt;br /&gt;-Frameskip set to 50 will avoid sound stuttering on load end device or with somes games that use much CPU.&lt;br /&gt;&lt;br /&gt;What's in this version:&lt;br /&gt;New Fix!&lt;br /&gt;Compatibility with Android 2.1 is back&lt;br /&gt;Many Fixes ( include config save, like bios etc..)&lt;br /&gt;Optimized Allocation Memory (more stable)&lt;br /&gt;New Cheat menu with 5 cheat lines,&lt;br /&gt;syntax for cheats is: 80123456,ABCD&lt;br /&gt;apply all by pressing one button.&lt;br /&gt;Added Backup/restore function (system menu),will let you change somes FPse internal settings and restore.&lt;br /&gt;Support  for Xperia play's DPADs, if PS1 pad is set to Analog ,Xperia's  DPAD  will emulate Analog Sticks if onscreen DPADs are activated&lt;br /&gt;&lt;br /&gt;Link : &lt;a href="http://www.megaupload.com/?d=ONNOBIQ4" target="_blank"&gt;http://www.megaupload.com/?d=ONNOBIQ4&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8528589384944803945-3671309663626674788?l=apps-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apps-games.blogspot.com/feeds/3671309663626674788/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://apps-games.blogspot.com/2011/04/fpse-para-android-v01038.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/3671309663626674788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/3671309663626674788'/><link rel='alternate' type='text/html' href='http://apps-games.blogspot.com/2011/04/fpse-para-android-v01038.html' title='FPse para android v0.10.38'/><author><name>Gabriel</name><uri>http://www.blogger.com/profile/14884294654690953722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8528589384944803945.post-4918603065195240622</id><published>2011-04-26T13:26:00.001-07:00</published><updated>2011-04-28T02:25:58.217-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desarollo'/><title type='text'>Anatomia de Android</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.htcspain.com/portal/wp-content/uploads/2011/04/woofdude_android_green1.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="570" width="550" src="http://www.htcspain.com/portal/wp-content/uploads/2011/04/woofdude_android_green1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8528589384944803945-4918603065195240622?l=apps-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apps-games.blogspot.com/feeds/4918603065195240622/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://apps-games.blogspot.com/2011/04/blog-post.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/4918603065195240622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/4918603065195240622'/><link rel='alternate' type='text/html' href='http://apps-games.blogspot.com/2011/04/blog-post.html' title='Anatomia de Android'/><author><name>Gabriel</name><uri>http://www.blogger.com/profile/14884294654690953722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8528589384944803945.post-5513828918557697500</id><published>2011-04-26T12:46:00.001-07:00</published><updated>2011-04-28T02:25:20.789-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desarollo'/><title type='text'>4. - Desarrollando una aplicación Android sencilla</title><content type='html'>Después de &lt;a href="http://www.sgoliver.net/blog/?p=1267" target="_self" title="Instalar entorno desarrollo Android"&gt;instalar nuestro entorno de desarrollo para Android&lt;/a&gt; y comentar la &lt;a href="http://www.sgoliver.net/blog/?p=1278" target="_self" title="Estructura de un proyecto Android"&gt;estructura básica de un proyecto&lt;/a&gt; y los diferentes &lt;a href="http://www.sgoliver.net/blog/?p=1295" target="_self" title="Componentes de una aplicación Android"&gt;componentes software&lt;/a&gt;  que podemos utilizar ya es hora de empezar a escribir algo de código. Y  como siempre lo mejor es empezar por escribir una aplicación sencilla.&lt;br /&gt;En un principio me planteé analizar en este post el clásico &lt;i&gt;Hola Mundo&lt;/i&gt; pero más tarde me pareció que se iban a quedar algunas cosas básicas en el tintero. Así que he versionado a mi manera el &lt;i&gt;Hola Mundo&lt;/i&gt; transformándolo en algo así como un &lt;i&gt;Hola Usuario&lt;/i&gt;,  que es igual de sencilla pero añade un par de cosas interesantes de  contar. La aplicación constará de dos pantallas, por un lado la pantalla  principal que solicitará un nombre al usuario y una segunda pantalla en  la que se mostrará un mensaje personalizado para el usuario. Sencillo,  inútil, pero aprenderemos muchos conceptos básicos, que para empezar no  está mal.&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/HolaUsuarioSc1.png"&gt;&lt;img alt="Hola Usuario Pantalla 1" class="size-medium wp-image-1320 alignleft" height="300" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/HolaUsuarioSc1-202x300.png" title="Hola Usuario Pantalla 1" width="202" /&gt;&lt;/a&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/HolaUsuarioSc2.png"&gt;&lt;img alt="Hola Usuario Pantalla 2" class="alignnone size-medium wp-image-1321" height="300" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/HolaUsuarioSc2-201x300.png" title="Hola Usuario Pantalla 2" width="201" /&gt;&lt;/a&gt;&lt;br /&gt;En primer lugar vamos a crear un nuevo proyecto Android tal como vimos al final del &lt;a href="http://www.sgoliver.net/blog/?p=1267" target="_self" title="Entorno de desarrollo Android"&gt;primer post de la serie&lt;/a&gt;.  Llamaremos al proyecto “HolaUsuario”, indicaremos como target por  ejemplo “Android 1.6″, daremos un nombre a la aplicación e indicaremos  que se cree una actividad llamada “HolaUsuario”.&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/HolaUsuarioProyecto.png"&gt;&lt;img alt="Nuevo Proyecto Hola Usuario" class="alignnone size-medium wp-image-1318" height="300" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/HolaUsuarioProyecto-214x300.png" title="Nuevo Proyecto Hola Usuario" width="214" /&gt;&lt;/a&gt;&lt;br /&gt;Como ya vimos esto nos crea la estructura de carpetas del proyecto y todos los ficheros necesarios de un &lt;i&gt;Hola Mundo&lt;/i&gt; básico, es decir, una sola pantalla donde se muestra únicamente un mensaje fijo.&lt;br /&gt;Lo primero que vamos a hacer es diseñar nuestra pantalla principal  modificando la que Eclipse nos ha creado por defecto. ¿Pero dónde y cómo  se define cada pantalla de la aplicación? En Android, el diseño y la  lógica de una pantalla estan separados en dos ficheros distintos. Por un  lado, en el fichero&amp;nbsp; &lt;span style="font-family: courier new,courier;"&gt;/res/layout/main.xml&lt;/span&gt; tendremos el diseño puramente visual de la pantalla definido como fichero XML y por otro lado, en el fichero&amp;nbsp; &lt;span style="font-family: courier new,courier;"&gt;/src/paquetejava/HolaUsuario.java&lt;/span&gt;, encontraremos el código java que determina la lógica de la pantalla.&lt;br /&gt;Vamos a modificar en primer lugar el aspecto de la ventana principal  de la aplicación añadiendo los controles (views) que vemos en la primera  captura de pantalla. Para ello, vamos a sustituir el contenido del  fichero &lt;span style="font-family: courier new,courier;"&gt;main.xml&lt;/span&gt; por el siguiente:&lt;br /&gt;&lt;div&gt;&lt;div class="syntaxhighlighter  xml" id="highlighter_704607"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;13&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;14&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;15&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;16&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;17&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;18&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;19&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;20&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;21&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="xml plain"&gt;&amp;lt;?&lt;/code&gt;&lt;code class="xml keyword"&gt;xml&lt;/code&gt; &lt;code class="xml color1"&gt;version&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"1.0"&lt;/code&gt; &lt;code class="xml color1"&gt;encoding&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"utf-8"&lt;/code&gt;&lt;code class="xml plain"&gt;?&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;LinearLayout&lt;/code&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;xmlns:android&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"&lt;a href="http://schemas.android.com/apk/res/android"&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:orientation&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"vertical"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_width&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"fill_parent"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_height&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"fill_parent"&lt;/code&gt; &lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;TextView&lt;/code&gt; &lt;code class="xml color1"&gt;android:text&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"@string/nombre"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_width&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"fill_parent"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_height&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"wrap_content"&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;EditText&lt;/code&gt; &lt;code class="xml color1"&gt;android:id&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"@+id/TxtNombre"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_height&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"wrap_content"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_width&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"fill_parent"&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;Button&lt;/code&gt; &lt;code class="xml color1"&gt;android:id&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"@+id/BtnHola"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_width&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"wrap_content"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_height&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"wrap_content"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:text&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"@string/hola"&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;LinearLayout&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;En este XML se definen los elementos visuales que componen la  interfaz de nuestra pantalla principal y se especifican todas sus  propiedades. No nos detendremos mucho en cada detalle porque ése será  tema de otro artículo, pero expliquemos un poco lo que vemos en el  fichero.&lt;br /&gt;Lo primero que nos encontramos es un elemento &lt;span style="font-family: courier new,courier;"&gt;LinearLayout&lt;/span&gt;. Los &lt;i&gt;layout &lt;/i&gt;son  elementos no visibles que determinan cómo se van a distribuir en el  espacio los controles que incluyamos en su interior. Los programadores  java, y más concretamente de &lt;i&gt;Swing&lt;/i&gt;, conocerán este concepto perfectamente. En este caso, un &lt;span style="font-family: courier new,courier;"&gt;LinearLayout&lt;/span&gt; distribuirá los controles uno tras otro y en la orientación que indique su propiedad &lt;span style="font-family: courier new,courier;"&gt;android:orientation&lt;/span&gt;.&lt;br /&gt;Dentro del layout hemos incluido 3 controles: una etiqueta (&lt;span style="font-family: courier new,courier;"&gt;TextView&lt;/span&gt;), un cuadro de texto (&lt;span style="font-family: courier new,courier;"&gt;EditText&lt;/span&gt;), y un botón (&lt;span style="font-family: courier new,courier;"&gt;Button&lt;/span&gt;). En todos ellos hemos establecido las siguientes propiedades:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;span style="font-family: courier new,courier;"&gt;android:id&lt;/span&gt;.  ID del control, con el que podremos identificarlo más tarde en nuestro  código.Vemos que el identificador lo escribimos precedido de “@+id/”.  Esto tendrá como efecto que al compilarse el proyecto se genere  automáticamente una nueva constante en la clase R para dicho control [&lt;a href="http://www.sgoliver.net/blog/?p=1278" target="_self" title="Estructura de un proyecto Android"&gt;Aprende más sobre la clase R&lt;/a&gt; en el post anterior].&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;android:text&lt;/span&gt;.  Texto del control. El texto de un control se puede especificar  directamente o bien utilizar alguna de las cadenas de texto definidas en  los &lt;a href="http://www.sgoliver.net/blog/?p=1278" target="_self" title="Estructura de un proyecto Android"&gt;recursos del proyecto&lt;/a&gt; (fichero &lt;i&gt;strings.xml&lt;/i&gt;), en cuyo caso indicaremos su identificador precedido del prefijo “@string/”.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;android:layout_height&lt;/span&gt; y &lt;span style="font-family: courier new,courier;"&gt;android:layout_width&lt;/span&gt;. Dimensiones del control con respecto al layout que lo contiene. Esta propiedad tomará normalmente los valores “&lt;span style="font-family: courier new,courier;"&gt;wrap_content&lt;/span&gt;” para indicar que las dimensiones del control se ajustarán al contenido del mismo, o bien “&lt;span style="font-family: courier new,courier;"&gt;fill_parent&lt;/span&gt;” para indicar que el ancho o el alto del control se ajustará al ancho o alto del layout contenedor respectivamente.&lt;/li&gt;&lt;/ul&gt;Con esto ya tenemos definida la presentación visual de nuestra  ventana principal de la aplicación. De igual forma definiremos la  interfaz de la segunda pantalla, creando un nuevo fichero llamado &lt;i&gt;frmmensaje.xml&lt;/i&gt;, y añadiendo esta vez tan solo una etiqueta (&lt;span style="font-family: courier new,courier;"&gt;TextView&lt;/span&gt;) para mostrar el mensaje personalizado al usuario. Veamos cómo quedaría nuestra segunda pantalla:&lt;br /&gt;&lt;div&gt;&lt;div class="syntaxhighlighter  xml" id="highlighter_902030"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="xml plain"&gt;&amp;lt;?&lt;/code&gt;&lt;code class="xml keyword"&gt;xml&lt;/code&gt; &lt;code class="xml color1"&gt;version&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"1.0"&lt;/code&gt; &lt;code class="xml color1"&gt;encoding&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"utf-8"&lt;/code&gt;&lt;code class="xml plain"&gt;?&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;LinearLayout&lt;/code&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;xmlns:android&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"&lt;a href="http://schemas.android.com/apk/res/android"&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_width&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"wrap_content"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_height&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"wrap_content"&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;TextView&lt;/code&gt; &lt;code class="xml color1"&gt;android:id&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"@+id/TxtMensaje"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_height&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"wrap_content"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:layout_width&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"fill_parent"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:text&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"$mensaje"&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;TextView&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;LinearLayout&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;Una vez definida la interfaz de las pantallas de la aplicación  deberemos implementar la lógica de la misma. Como ya hemos comentado, la  lógica de la aplicación se definirá en ficheros java independientes.  Para la pantalla principal ya tenemos creado un fichero por defecto  llamado &lt;i&gt;HolaUsuario.java&lt;/i&gt;. Empecemos por comentar su código por defecto:&lt;br /&gt;&lt;div&gt;&lt;div class="syntaxhighlighter  java" id="highlighter_207082"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;class&lt;/code&gt; &lt;code class="java plain"&gt;HolaUsuario &lt;/code&gt;&lt;code class="java keyword"&gt;extends&lt;/code&gt; &lt;code class="java plain"&gt;Activity {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java preprocessor"&gt;/** Called when the activity is first created. */&lt;/code&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java color1"&gt;@Override&lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;void&lt;/code&gt; &lt;code class="java plain"&gt;onCreate(Bundle savedInstanceState) {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;super&lt;/code&gt;&lt;code class="java plain"&gt;.onCreate(savedInstanceState);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;setContentView(R.layout.main);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;Como ya vimos en un &lt;a href="http://www.sgoliver.net/blog/?p=1295" target="_self" title="Componentes de una aplicación Android"&gt;post anterior&lt;/a&gt;, las diferentes pantallas de una aplicación Android se definen mediante objetos de tipo &lt;span style="font-family: courier new,courier;"&gt;Activity&lt;/span&gt;. Por tanto, lo primero que encontramos en nuestro fichero java es la definición de una nueva clase &lt;span style="font-family: courier new,courier;"&gt;HolaUsuario&lt;/span&gt; que extiende a &lt;span style="font-family: courier new,courier;"&gt;Activity&lt;/span&gt;. El único método que sobreescribiremos de esta clase será el método &lt;span style="font-family: courier new,courier;"&gt;OnCreate&lt;/span&gt;,  llamado cuando se crea por primera vez la actividad. En este método lo  único que encontramos en principio, además de la llamada a su  implementación en la clase padre, es la llamada al método &lt;span style="font-family: courier new,courier;"&gt;setContentView(R.layout.main)&lt;/span&gt;.  Con esta llamada estaremos indicando a Android que debe establecer como  interfaz gráfica de esta actividad la definida en el recurso &lt;span style="font-family: courier new,courier;"&gt;R.layout.main&lt;/span&gt;, que no es más que la que hemos especificado en el fichero &lt;i&gt;/res/layout/main.xml&lt;/i&gt;.  Una vez más vemos la utilidad de las diferentes constantes de recursos  creadas automáticamente en la clase R al compilar el proyecto.&lt;br /&gt;En principio vamos a crear una nueva actividad para la segunda  pantalla de la aplicación análoga a ésta primera, para lo que crearemos  una nueva clase &lt;span style="font-family: courier new,courier;"&gt;FrmMensaje&lt;/span&gt; que exienda de &lt;span style="font-family: courier new,courier;"&gt;Activity&lt;/span&gt; y que implemente el método &lt;span style="font-family: courier new,courier;"&gt;onCreate&lt;/span&gt; indicando que utilice la interfaz definida en &lt;span style="font-family: courier new,courier;"&gt;R.layout.frmmensaje&lt;/span&gt;.&lt;br /&gt;&lt;div&gt;&lt;div class="syntaxhighlighter  java" id="highlighter_963112"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;class&lt;/code&gt; &lt;code class="java plain"&gt;FrmMensaje &lt;/code&gt;&lt;code class="java keyword"&gt;extends&lt;/code&gt; &lt;code class="java plain"&gt;Activity {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java color1"&gt;@Override&lt;/code&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;void&lt;/code&gt; &lt;code class="java plain"&gt;onCreate(Bundle savedInstanceState) {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;super&lt;/code&gt;&lt;code class="java plain"&gt;.onCreate(savedInstanceState);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;setContentView(R.layout.frmmensaje);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;Como vemos, el código incluido por defecto en estas clases lo único  que hace es generar la interfaz de la actividad. A partir de aquí  nosotros tendremos que incluir el resto de la lógica de la aplicación. Y  vamos a empezar con la actividad principal &lt;span style="font-family: courier new,courier;"&gt;HolaUsuario&lt;/span&gt;,  obteniendo una referencia a los diferentes controles de la interfaz que  necesitemos manipular, en nuestro caso sólo el cuadro de texto y el  botón. Para ello utilizaremos el método &lt;span style="font-family: courier new,courier;"&gt;findViewById() &lt;/span&gt;indicando el ID de cada control, definidos como siempre en la clase R:&lt;br /&gt;&lt;div&gt;&lt;div class="syntaxhighlighter  java" id="highlighter_852680"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java plain"&gt;EditText txtNombre = (EditText)findViewById(R.id.TxtNombre);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java plain"&gt;Button btnHola = (Button)findViewById(R.id.BtnHola);&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;Una vez tenemos acceso a los diferentes controles, ya sólo nos queda  implementar las acciones a tomar cuando pulsemos el botón de la  pantalla. Para ello implementaremos el evento onClick de dicho botón,  veamos cómo:&lt;br /&gt;&lt;div&gt;&lt;div class="syntaxhighlighter  java" id="highlighter_229150"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="java plain"&gt;btnHola.setOnClickListener(&lt;/code&gt;&lt;code class="java keyword"&gt;new&lt;/code&gt; &lt;code class="java plain"&gt;OnClickListener() {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java color1"&gt;@Override&lt;/code&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;void&lt;/code&gt; &lt;code class="java plain"&gt;onClick(View arg0) {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;Intent intent = &lt;/code&gt;&lt;code class="java keyword"&gt;new&lt;/code&gt; &lt;code class="java plain"&gt;Intent(HolaUsuario.&lt;/code&gt;&lt;code class="java keyword"&gt;this&lt;/code&gt;&lt;code class="java plain"&gt;, FrmMensaje.&lt;/code&gt;&lt;code class="java keyword"&gt;class&lt;/code&gt;&lt;code class="java plain"&gt;);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;Bundle bundle = &lt;/code&gt;&lt;code class="java keyword"&gt;new&lt;/code&gt; &lt;code class="java plain"&gt;Bundle();&lt;/code&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;bundle.putString(&lt;/code&gt;&lt;code class="java string"&gt;"NOMBRE"&lt;/code&gt;&lt;code class="java plain"&gt;, txtNombre.getText().toString());&lt;/code&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;intent.putExtras(bundle);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;startActivity(intent);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;code class="java plain"&gt;});&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;Como ya indicamos en el &lt;a href="http://www.sgoliver.net/blog/?p=1295" target="_self" title="Componentes de una aplicación Android"&gt;artículo anterior&lt;/a&gt;, la comunicación entre los distintos componentes y aplicaciones en Android se realiza mediante &lt;i&gt;intents&lt;/i&gt;, por lo que el primer paso será crear un objeto de este tipo. Existen varias variantes del constructor de la clase &lt;span style="font-family: courier new,courier;"&gt;Intent&lt;/span&gt;, cada una de ellas dirigida a unas determinadas acciones, pero en nuestro caso particular vamos a utilizar el &lt;i&gt;intent&lt;/i&gt;  para llamar a una actividad desde otra de la misma aplicación, para lo  que pasaremos al constructor una referencia a la propia actividad  llamadora (&lt;span style="font-family: courier new,courier;"&gt;HolaUsuario.this&lt;/span&gt;), y la clase de la actividad llamada (&lt;span style="font-family: courier new,courier;"&gt;FrmMensaje.class&lt;/span&gt;).&lt;br /&gt;Si quisiéramos tan sólo mostrar una nueva actividad ya tan sólo nos quedaría llamar a &lt;span style="font-family: courier new,courier;"&gt;startActivity()&lt;/span&gt; pasándole como parámetro el &lt;i&gt;intent&lt;/i&gt;  creado. Pero en nuestro ejemplo queremos también pasarle cierta  información a la actividad, concretamente el nombre que introduzca el  usuario en el cuadro de texto. Para hacer esto vamos a crear un objeto &lt;span style="font-family: courier new,courier;"&gt;Bundle&lt;/span&gt;,  que puede contener una lista de pares clave-valor con toda la  información a pasar entre las actividades. En nuestro caso sólo  añadiremos un dato de tipo &lt;span style="font-family: courier new,courier;"&gt;String&lt;/span&gt; mediante el método &lt;span style="font-family: courier new,courier;"&gt;putString(&lt;i&gt;clave&lt;/i&gt;, &lt;i&gt;valor&lt;/i&gt;)&lt;/span&gt;. Tras esto añadiremos la información al &lt;i&gt;intent&lt;/i&gt; mediante el método &lt;span style="font-family: courier new,courier;"&gt;putExtras(&lt;i&gt;bundle&lt;/i&gt;)&lt;/span&gt;.&lt;br /&gt;Finalizada la actividad principal de la aplicación pasamos ya a la  secundaria. Comenzaremos de forma análoga a la anterior, ampliando el  método &lt;span style="font-family: courier new,courier;"&gt;onCreate&lt;/span&gt;  obteniendo las referencias a los objetos que manipularemos, esta vez  sólo la etiqueta de texto. Tras esto viene lo más interesante, debemos  recuperar la información pasada desde la actividad principal y asignarla  como texto de la etiqueta. Para ello accederemos en primer lugar al &lt;i&gt;intent&lt;/i&gt; que ha originado la actividad actual mediante el método &lt;span style="font-family: courier new,courier;"&gt;getIntent()&lt;/span&gt; y recuperaremos su información asociada (objeto &lt;span style="font-family: courier new,courier;"&gt;Bundle&lt;/span&gt;) mediante el método &lt;span style="font-family: courier new,courier;"&gt;getExtras()&lt;/span&gt;.&lt;br /&gt;Hecho esto tan sólo nos queda construir el texto de la etiqueta mediante su método &lt;span style="font-family: courier new,courier;"&gt;setText(&lt;i&gt;text&lt;/i&gt;o)&lt;/span&gt; y recuperando el valor de nuestra clave almacenada en el objeto &lt;span style="font-family: courier new,courier;"&gt;Bundle&lt;/span&gt; mediante &lt;span style="font-family: courier new,courier;"&gt;getString(&lt;i&gt;clave&lt;/i&gt;)&lt;/span&gt;.&lt;br /&gt;&lt;div&gt;&lt;div class="syntaxhighlighter  java" id="highlighter_314841"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;13&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;14&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;class&lt;/code&gt; &lt;code class="java plain"&gt;FrmMensaje &lt;/code&gt;&lt;code class="java keyword"&gt;extends&lt;/code&gt; &lt;code class="java plain"&gt;Activity {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java color1"&gt;@Override&lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;void&lt;/code&gt; &lt;code class="java plain"&gt;onCreate(Bundle savedInstanceState) {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;super&lt;/code&gt;&lt;code class="java plain"&gt;.onCreate(savedInstanceState);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;setContentView(R.layout.frmmensaje);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;TextView txtMensaje = (TextView)findViewById(R.id.TxtMensaje);&lt;/code&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;Bundle bundle = getIntent().getExtras();&lt;/code&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;txtMensaje.setText(&lt;/code&gt;&lt;code class="java string"&gt;"Hola "&lt;/code&gt; &lt;code class="java plain"&gt;+ bundle.getString(&lt;/code&gt;&lt;code class="java string"&gt;"NOMBRE"&lt;/code&gt;&lt;code class="java plain"&gt;));&lt;/code&gt;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;Con esto hemos concluido la lógica de las dos pantallas de nuestra  aplicación y tan sólo nos queda un paso importante para finalizar  nuestro desarrollo. Como indicamos en &lt;a href="http://www.sgoliver.net/blog/?p=1278" target="_self" title="Estructura de un proyecto Android"&gt;uno de los artículos anteriores&lt;/a&gt;, cualquier aplicación Android utiliza un fichero especial en formato XML (&lt;i&gt;AndroidManifest.xml&lt;/i&gt;)  para definir, entre otras cosas, los diferentes elementos que la  componen. Por tanto, todas las actividades de nuestra aplicación deben  quedar convenientemente recogidas en este fichero. La actividad  principal ya debe aparecer puesto que se creó de forma automática al  crear el nuevo proyecto Android, por lo que debemos añadir tan sólo la  segunda. Para este ejemplo nos limitaremos a incluir la actividad en el  XML, más adelante veremos que opciones adicionales podemos especificar.&lt;br /&gt;&lt;div&gt;&lt;div class="syntaxhighlighter  xml" id="highlighter_498593"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;13&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;14&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;15&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;16&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;17&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;18&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;19&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;20&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;21&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="xml plain"&gt;&amp;lt;?&lt;/code&gt;&lt;code class="xml keyword"&gt;xml&lt;/code&gt; &lt;code class="xml color1"&gt;version&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"1.0"&lt;/code&gt; &lt;code class="xml color1"&gt;encoding&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"utf-8"&lt;/code&gt;&lt;code class="xml plain"&gt;?&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;manifest&lt;/code&gt; &lt;code class="xml color1"&gt;xmlns:android&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"&lt;a href="http://schemas.android.com/apk/res/android"&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;package&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"net.sgoliver"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:versionCode&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"1"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:versionName&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"1.0"&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;application&lt;/code&gt; &lt;code class="xml color1"&gt;android:icon&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"@drawable/icon"&lt;/code&gt; &lt;code class="xml color1"&gt;android:label&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"@string/app_name"&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;activity&lt;/code&gt; &lt;code class="xml color1"&gt;android:name&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;".HolaUsuario"&lt;/code&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml color1"&gt;android:label&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"@string/app_name"&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;intent-filter&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;action&lt;/code&gt; &lt;code class="xml color1"&gt;android:name&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"android.intent.action.MAIN"&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;category&lt;/code&gt; &lt;code class="xml color1"&gt;android:name&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"android.intent.category.LAUNCHER"&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;intent-filter&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;activity&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;activity&lt;/code&gt; &lt;code class="xml color1"&gt;android:name&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;".FrmMensaje"&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;activity&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number17 index16 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;application&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number18 index17 alt1"&gt;&lt;/div&gt;&lt;div class="line number19 index18 alt2"&gt;&lt;code class="xml spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;uses-sdk&lt;/code&gt; &lt;code class="xml color1"&gt;android:minSdkVersion&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;"4"&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number20 index19 alt1"&gt;&lt;/div&gt;&lt;div class="line number21 index20 alt2"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;manifest&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;Una vez llegado aquí, si todo ha ido bien, deberíamos poder ejecutar  el proyecto sin errores y probar nuestra aplicación en el emulador.&lt;br /&gt;Descarga el &lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/HolaUsuario.zip"&gt;código fuente de este artículo&lt;/a&gt;.&lt;br /&gt;Espero que esta aplicación de ejemplo os haya servido para aprender  temas básicos en el desarrollo para Android, como por ejemplo la  definición de la interfaz gráfica, el código java necesario para acceder  y manipular los elementos de dicha interfaz, o la forma de comunicar  diferentes actividades de Android. En los artículos siguientes veremos  algunos de estos temas de forma más específica y ampliaremos con algunos  temas más avanzados.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8528589384944803945-5513828918557697500?l=apps-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apps-games.blogspot.com/feeds/5513828918557697500/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://apps-games.blogspot.com/2011/04/desarrollo-para-android-desarrollando.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/5513828918557697500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/5513828918557697500'/><link rel='alternate' type='text/html' href='http://apps-games.blogspot.com/2011/04/desarrollo-para-android-desarrollando.html' title='4. - Desarrollando una aplicación Android sencilla'/><author><name>Gabriel</name><uri>http://www.blogger.com/profile/14884294654690953722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8528589384944803945.post-4259806486944173909</id><published>2011-04-26T12:45:00.001-07:00</published><updated>2011-04-26T12:50:21.806-07:00</updated><title type='text'>3. - Componentes de una aplicación Android</title><content type='html'>En el post anterior vimos la &lt;a href="http://www.sgoliver.net/blog/?p=1278" target="_self" title="Estructura de un proyecto Android"&gt;estructura de un proyecto Android&lt;/a&gt;  y aprendimos dónde colocar cada uno de los elementos que componen una  aplicación, tanto elementos de software como recursos gráficos o de  datos. En éste nuevo post vamos a centrarnos específicamente en los  primeros, es decir, veremos los distintos tipos de componentes de  software con los que podremos construir una aplicación Android.&lt;br /&gt;En Java o .NET estamos acostumbrados a manejar conceptos como &lt;i&gt;ventana&lt;/i&gt;, &lt;i&gt;control&lt;/i&gt;, &lt;i&gt;eventos &lt;/i&gt;o &lt;i&gt;servicios &lt;/i&gt;como los elementos básicos en la construcción de una aplicación.&lt;br /&gt;Pues bien, en Android vamos a disponer de esos mismos elementos  básicos aunque con un pequeño cambio en la terminología y el enfoque.  Repasemos los componentes principales que pueden formar parte de una  aplicación Android [Por claridad, y para evitar confusiones al consultar  documentación en inglés, intentaré traducir lo menos posible los  nombres originales de los componentes].&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Activity&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Las &lt;i&gt;actividades &lt;/i&gt;(activities) representan el componente principal de la interfaz gráfica de una aplicación Android. Se puede pensar en una &lt;i&gt;actividad &lt;/i&gt;como el elemento análogo a una &lt;i&gt;ventana &lt;/i&gt;en cualquier otro lenguaje visual.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;View&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Los objetos &lt;i&gt;view &lt;/i&gt;son los componentes básicos con los que se construye la interfaz gráfica de la aplicación, análogo por ejemplo a los &lt;i&gt;controles &lt;/i&gt;de  Java o .NET. De inicio, Android pone a nuestra disposición una gran  cantidad de controles básicos, como cuadros de texto, botones, listas  desplegables o imágenes, aunque también existe la posibilidad de  extender la funcionalidad de estos controles básicos o crear nuestros  propios controles personalizados.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Service&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Los &lt;i&gt;servicios&lt;/i&gt; son componentes sin interfaz gráfica que se  ejecutan en segundo plano. En concepto, son exactamente iguales a los  servicios presentes en cualquier otro sistema operativo. Los servicios  pueden realizar cualquier tipo de acciones, por ejemplo actualizar  datos, lanzar notificaciones, o incluso mostrar elementos visuales (&lt;i&gt;activities&lt;/i&gt;) si se necesita en algún momento la interacción con del usuario.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Content Provider&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Un &lt;i&gt;content provider&lt;/i&gt; es el mecanismo que se ha definido en  Android para compartir datos entre aplicaciones. Mediante estos  componentes es posible compartir determinados datos de nuestra  aplicación sin mostrar detalles sobre su almacenamiento interno, su  estructura, o su implementación. De la misma forma, nuestra aplicación  podrá acceder a los datos de otra a través de los &lt;i&gt;content provider&lt;/i&gt; que se hayan definido.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Broadcast Receiver&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Un &lt;i&gt;broadcast receiver&lt;/i&gt; es un componente destinado a detectar y  reaccionar ante determinados mensajes o eventos globales generados por  el sistema&amp;nbsp; (por ejemplo: “Batería baja”, “SMS recibido”, “Tarjeta SD  insertada”, …) o por otras aplicaciones (cualquier aplicación puede  generar mensajes (&lt;i&gt;intents&lt;/i&gt;, en terminología Android) broadcast, es decir, no dirigidos a una aplicación concreta sino a cualquiera que quiera &lt;i&gt;escucharlo&lt;/i&gt;).&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Widget&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Los &lt;i&gt;widgets &lt;/i&gt;son elementos visuales, normalmente interactivos, que pueden mostrarse en la pantalla principal (&lt;i&gt;home screen&lt;/i&gt;)  del dispositivo Android y recibir actualizaciones periódicas. Permiten  mostrar información de la aplicación al usuario directamente sobre la  pantalla principal.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Intent&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Un &lt;i&gt;intent &lt;/i&gt;es el elemento básico de comunicación entre los  distintos componentes Android que hemos descrito anteriormente. Se  pueden entender como los &lt;i&gt;mensajes &lt;/i&gt;o &lt;i&gt;peticiones &lt;/i&gt;que son enviados entre los distintos componentes de una aplicación o entre distintas aplicaciones. Mediante un &lt;i&gt;intent &lt;/i&gt;se puede mostrar una &lt;i&gt;actividad &lt;/i&gt;desde cualquier otra, iniciar un servicio, enviar un mensaje &lt;i&gt;broadcast&lt;/i&gt;, iniciar otra aplicación, etc.&lt;br /&gt;En el siguiente post empezaremos ya a ver algo de código, analizando al detalle una aplicación sencilla.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8528589384944803945-4259806486944173909?l=apps-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apps-games.blogspot.com/feeds/4259806486944173909/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://apps-games.blogspot.com/2011/04/desarrollo-para-android-componentes-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/4259806486944173909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/4259806486944173909'/><link rel='alternate' type='text/html' href='http://apps-games.blogspot.com/2011/04/desarrollo-para-android-componentes-de.html' title='3. - Componentes de una aplicación Android'/><author><name>Gabriel</name><uri>http://www.blogger.com/profile/14884294654690953722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8528589384944803945.post-1242352733764782648</id><published>2011-04-26T12:43:00.001-07:00</published><updated>2011-04-28T02:25:33.935-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desarollo'/><title type='text'>2. - Estructura de un proyecto Android</title><content type='html'>Seguimos con el &lt;a href="http://www.sgoliver.net/blog/?p=1313" title="Desarrollo en Android"&gt;Curso de Programación Android&lt;/a&gt;.  Para empezar a comprender cómo se construye una aplicación Android  vamos a echar un vistazo a la estructura general de un proyecto tipo.&lt;br /&gt;Cuando creamos un nuevo proyecto Android en Eclipse se genera  automáticamente la estructura de carpetas necesaria para poder generar  posteriormente la aplicación. Esta estructura será común a cualquier  aplicación, independientemente de su tamaño y complejidad.&lt;br /&gt;En la siguiente imagen vemos los elementos creados inicialmente para un nuevo proyecto Android:&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/estruct-proyecto.png"&gt;&lt;img alt="Estructura General Proyecto Android" class="alignnone size-full wp-image-1279" height="136" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/estruct-proyecto.png" title="Estructura General Proyecto Android" width="193" /&gt;&lt;/a&gt;&lt;br /&gt;Describamos los elementos principales.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Carpeta /src/&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Contiene todo el código fuente de la aplicación, código de la  interfaz gráfica, clases auxiliares, etc. Inicialmente, Eclipse creará  por nosotros el código básico de la pantalla (&lt;i&gt;Activity&lt;/i&gt;) principal de la aplicación, siempre bajo la estructura del paquete java definido.&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/estruct-proyecto-src.png"&gt;&lt;img alt="Estructura Proyecto Android Carpeta SRC" class="alignnone size-full wp-image-1284" height="67" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/estruct-proyecto-src.png" title="Estructura Proyecto Android Carpeta SRC" width="166" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Carpeta /res/ &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Contiente todos los ficheros de recursos necesarios para el proyecto:  imágenes, vídeos, cadenas de texto, etc. Los diferentes tipos de  recursos de deberán distribuir entre las siguientes carpetas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;/res/drawable/&lt;/span&gt;. Contienen las imágenes de la aplicación. Se puede dividir en &lt;span style="font-family: courier new,courier;"&gt;/drawable-ldpi&lt;/span&gt;, &lt;span style="font-family: courier new,courier;"&gt;/drawable-mdpi&lt;/span&gt; y /&lt;span style="font-family: courier new,courier;"&gt;drawable-hdpi&lt;/span&gt; para utilizar diferentes recursos dependiendo de la resolución del dispositivo.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;/res/layout/&lt;/span&gt;. Contienen los ficheros de definición de las diferentes pantallas de la interfaz gráfica. Se puede dividir en &lt;span style="font-family: courier new,courier;"&gt;/layout&lt;/span&gt; y &lt;span style="font-family: courier new,courier;"&gt;/layout-land&lt;/span&gt; para definir distintos layouts dependiendo de la orientación del dispositivo.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;/res/anim/&lt;/span&gt;. Contiene la definición de las animaciones utilizadas por la aplicación.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;/res/menu/&lt;/span&gt;. Contiene la definición de los menús de la aplicación.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;/res/values/&lt;/span&gt;. Contiene otros recursos de la aplicación como por ejemplo cadenas de texto (&lt;span style="font-family: courier new,courier;"&gt;strings.xml&lt;/span&gt;), estilos (&lt;span style="font-family: courier new,courier;"&gt;styles.xml&lt;/span&gt;), colores (&lt;span style="font-family: courier new,courier;"&gt;colors.xml&lt;/span&gt;), etc.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;/res/xml/&lt;/span&gt;. Contiene los ficheros XML utilizados por la aplicación.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new,courier;"&gt;/res/raw/&lt;/span&gt;. Contiene recursos adicionales, normalmente en formato distinto a XML, que no se incluyan en el resto de carpetas de recursos.&lt;/li&gt;&lt;/ul&gt;Como ejemplo, para un proyecto nuevo Android, se crean los siguientes recursos para la aplicación:&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/estruct-proyecto-res.png"&gt;&lt;img alt="Estructura Poryecto Android Carpeta RES" class="alignnone size-full wp-image-1285" height="187" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/estruct-proyecto-res.png" title="Estructura Poryecto Android Carpeta RES" width="144" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Carpeta /gen/&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Contiene una serie de elementos de código generados automáticamente  al compilar el proyecto. Cada vez que generamos nuestro proyecto, la  maquinaria de compilación de Android genera por nosotros una serie de  ficheros fuente en java dirigidos al control de los recursos de la  aplicación.&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/estruct-proyecto-gen.png"&gt;&lt;img alt="Estructura Proyecto Android Carpeta GEN" class="alignnone size-full wp-image-1289" height="202" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/estruct-proyecto-gen.png" title="Estructura Proyecto Android Carpeta GEN" width="189" /&gt;&lt;/a&gt;&lt;br /&gt;El más importante es el que se puede observar en la imagen, el fichero &lt;span style="font-family: courier new,courier;"&gt;R.java&lt;/span&gt;, y la clase &lt;span style="font-family: courier new,courier;"&gt;R&lt;/span&gt;.&lt;br /&gt;Esta clase &lt;span style="font-family: courier new,courier;"&gt;R&lt;/span&gt; contendrá en todo momento una serie de constantes con los ID de todos los recursos de la aplicación incluidos en la carpeta &lt;span style="font-family: courier new,courier;"&gt;/res/&lt;/span&gt;,  de forma que podamos acceder facilmente a estos recursos desde nuestro  código a traves de este dato. Así, por ejemplo, la constante &lt;span style="font-family: courier new,courier;"&gt;R.drawable.icon&lt;/span&gt; contendrá el ID de la imagen &lt;span style="font-family: courier new,courier;"&gt;“icon.png”&lt;/span&gt; contenida en la carpeta &lt;span style="font-family: courier new,courier;"&gt;/res/drawable/&lt;/span&gt;. Veamos como ejemplo la clase R creada por defecto para un proyecto nuevo:&lt;br /&gt;&lt;div&gt;&lt;div class="syntaxhighlighter  java" id="highlighter_753556"&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;div class="line number1 index0 alt2"&gt;1&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;2&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;3&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;4&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;5&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;6&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;7&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;8&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;9&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;10&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;11&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;12&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;13&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;14&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;15&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;16&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="container"&gt;&lt;div class="line number1 index0 alt2"&gt;&lt;code class="java keyword"&gt;package&lt;/code&gt; &lt;code class="java plain"&gt;net.sgoliver;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number2 index1 alt1"&gt;&lt;/div&gt;&lt;div class="line number3 index2 alt2"&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java keyword"&gt;class&lt;/code&gt; &lt;code class="java plain"&gt;R {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number4 index3 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;static&lt;/code&gt; &lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java keyword"&gt;class&lt;/code&gt; &lt;code class="java plain"&gt;attr {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number5 index4 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;div class="line number6 index5 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;static&lt;/code&gt; &lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java keyword"&gt;class&lt;/code&gt; &lt;code class="java plain"&gt;drawable {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number7 index6 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;static&lt;/code&gt; &lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java keyword"&gt;int&lt;/code&gt; &lt;code class="java plain"&gt;icon=&lt;/code&gt;&lt;code class="java value"&gt;0x7f020000&lt;/code&gt;&lt;code class="java plain"&gt;;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number8 index7 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;div class="line number9 index8 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;static&lt;/code&gt; &lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java keyword"&gt;class&lt;/code&gt; &lt;code class="java plain"&gt;layout {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number10 index9 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;static&lt;/code&gt; &lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java keyword"&gt;int&lt;/code&gt; &lt;code class="java plain"&gt;main=&lt;/code&gt;&lt;code class="java value"&gt;0x7f030000&lt;/code&gt;&lt;code class="java plain"&gt;;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number11 index10 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;div class="line number12 index11 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;static&lt;/code&gt; &lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java keyword"&gt;class&lt;/code&gt; &lt;code class="java plain"&gt;string {&lt;/code&gt;&lt;/div&gt;&lt;div class="line number13 index12 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;static&lt;/code&gt; &lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java keyword"&gt;int&lt;/code&gt; &lt;code class="java plain"&gt;app_name=&lt;/code&gt;&lt;code class="java value"&gt;0x7f040001&lt;/code&gt;&lt;code class="java plain"&gt;;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number14 index13 alt1"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java keyword"&gt;public&lt;/code&gt; &lt;code class="java keyword"&gt;static&lt;/code&gt; &lt;code class="java keyword"&gt;final&lt;/code&gt; &lt;code class="java keyword"&gt;int&lt;/code&gt; &lt;code class="java plain"&gt;hello=&lt;/code&gt;&lt;code class="java value"&gt;0x7f040000&lt;/code&gt;&lt;code class="java plain"&gt;;&lt;/code&gt;&lt;/div&gt;&lt;div class="line number15 index14 alt2"&gt;&lt;code class="java spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;div class="line number16 index15 alt1"&gt;&lt;code class="java plain"&gt;}&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Carpeta /assets/&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Contiene todos los demás ficheros auxiliares necesarios para la  aplicación (y que se incluirán en su propio paquete), como por ejemplo  ficheros de configuración, de datos, etc.&lt;br /&gt;La diferencia entre los recursos incluidos en la carpeta &lt;span style="font-family: courier new,courier;"&gt;/res/raw/&lt;/span&gt; y los incluidos en la carpeta &lt;span style="font-family: courier new,courier;"&gt;/assets/&lt;/span&gt; es que para los primeros se generará un ID en la clase &lt;span style="font-family: courier new,courier;"&gt;R&lt;/span&gt;  y se deberá acceder a ellos con los diferentes métodos de acceso a  recursos. Para los segundos sin embargo no se generarán ID y se podrá  acceder a ellos por su ruta como a cualquier otro fichero del sistema.  Usaremos uno u otro según las necesidades de nuestra aplicación.&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;b&gt;Fichero AndroidManifest.xml&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Contiene la definición en XML de los aspectos principales de la  aplicación, como por ejemplo su identificación (nombre, versión, icono,  …), sus componentes (pantallas, mensajes, …), o los permisos necesarios  para su ejecución. Veremos más adelante más detalles de este fichero.&lt;br /&gt;En el &lt;a href="http://www.sgoliver.net/blog/?p=1295" target="_self" title="Componentes de una aplicación Android"&gt;siguiente post&lt;/a&gt; veremos los componentes software principales con los que podemos construir una aplicación Android.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8528589384944803945-1242352733764782648?l=apps-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apps-games.blogspot.com/feeds/1242352733764782648/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://apps-games.blogspot.com/2011/04/desarrollo-para-android-estructura-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/1242352733764782648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/1242352733764782648'/><link rel='alternate' type='text/html' href='http://apps-games.blogspot.com/2011/04/desarrollo-para-android-estructura-de.html' title='2. - Estructura de un proyecto Android'/><author><name>Gabriel</name><uri>http://www.blogger.com/profile/14884294654690953722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8528589384944803945.post-6030403963835847133</id><published>2011-04-26T12:41:00.000-07:00</published><updated>2011-04-28T02:25:46.225-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Desarollo'/><title type='text'>1. - Entorno de desarrollo Android</title><content type='html'>A partir de ahora voy a publicar también algunos artículos sobre   desarrollo paar la plataforma Android. Y para empezar, voy a describir   los pasos básicos para disponer en nuestro PC del entorno y las   herramientas necesarias para comenzar a programar aplicaciones Android.&lt;br /&gt;No voy a ser exhaustivo, ya existen muy buenos tutoriales sobre la instalación de Eclipse y Android, incluida al &lt;a href="http://developer.android.com/sdk/installing.html" target="_blank" title="Documentación Oficial Android"&gt;documentación oficial&lt;/a&gt;  de la plataforma. Además, si has llegado hasta este blog quiero suponer   que tienes unos conocimientos básicos de Eclipse y Java, por lo que  tan  sólo enumeraré los pasos necesarios de instalación y configuración,  y  proporcionaré los enlaces a las distintas herramientas. Vamos allá.&lt;br /&gt;&lt;b&gt;Paso 1. Descarga e instalación de Eclipse.&lt;/b&gt;&lt;br /&gt;Si aún no tienes instalado Eclipse, puedes descargar la versión 3.5 desde &lt;a href="http://www.eclipse.org/downloads/packages/release/galileo/sr2" target="_blank" title="Descarga Eclipse 3.5 Galileo"&gt;este enlace&lt;/a&gt; (Ojo, la versión 3.6 parece que aún no se lleva muy bien con Android). Recomiendo descargar por ejemplo la versión &lt;i&gt;Eclipse IDE for Java Developers&lt;/i&gt;. La instalación consiste simplemente en descomprimir el zip en la ubicación deseada.&lt;br /&gt;&lt;b&gt;Paso 2. Descargar el SDK de Android.&lt;/b&gt;&lt;br /&gt;El SDK de la plataforma Android se puede descargar desde &lt;a href="http://developer.android.com/sdk/index.html" target="_blank" title="Descargar SDK de Android"&gt;aquí&lt;/a&gt;. Una vez descargado, de nuevo bastará con descomprimir el zip en cualquier ubicación.&lt;br /&gt;&lt;b&gt;Paso 3. Descargar el plugin Android para Eclipse.&lt;/b&gt;&lt;br /&gt;Google pone a disposición de los desarrolladores un plugin para Eclipse llamado &lt;i&gt;Android Development Tools&lt;/i&gt;  (ADT) que facilita en gran medida el desarrollo de aplicaciones para la   plataforma. Podéis descargarlo mediante las opciones de actualización   de Eclipse, accediendo al menú “&lt;i&gt;Help / Install new software…&lt;/i&gt;” e   indicando la URL de descarga   “https://dl-ssl.google.com/android/eclipse/”. Se debe seleccionar e   instalar el paquete completo &lt;i&gt;Developer Tools&lt;/i&gt;, formado por &lt;i&gt;Android DDMS&lt;/i&gt; y &lt;i&gt;Android Development Tools&lt;/i&gt;.&lt;br /&gt;&lt;b&gt;Paso 4. Configurar el plugin ADT.&lt;/b&gt;&lt;br /&gt;En la ventana de configuración de Eclipse, se debe acceder a la   sección de Android e indicar la ruta en la que se ha instalado el SDK   (paso 2).&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/config-adt.gif"&gt;&lt;img alt="config-adt" class="alignnone size-medium wp-image-1723" height="209" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/config-adt-300x209.gif" title="config-adt" width="300" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Paso 5. Descargar los&lt;i&gt; targets&lt;/i&gt; necesarios.&lt;/b&gt;&lt;br /&gt;Además del SDK de Android comentado en el paso 2, también debemos descargar los llamados &lt;i&gt;SDK Targets&lt;/i&gt;  de Android, que no son más que las librerías necesarias para   desarrollar en cada una de las versiones concretas de Android. Así, si   queremos desarrollar por ejemplo para Android 1.6 tendremos que   descargar su &lt;i&gt;target &lt;/i&gt;correspondiente. Para ello, desde Eclipse debemos acceder al menú “&lt;i&gt;Window / Android SDK and AVD Manager&lt;/i&gt;“, y en la sección &lt;i&gt;Available Packages&lt;/i&gt; seleccionar e instalar todos los paquetes deseados.&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/instalar-targets.gif"&gt;&lt;img alt="instalar-targets" class="alignnone size-medium wp-image-1724" height="195" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/instalar-targets-300x195.gif" title="instalar-targets" width="300" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Paso 6. Configurar un AVD.&lt;/b&gt;&lt;br /&gt;A  la hora de probar y depurar aplicaciones Android no tendremos que   hacerlo necesariamente sobre un dispositivo físico, sino que podremos   configurar un emulador o dispositivo virtual (&lt;i&gt;Android Virtual Device&lt;/i&gt;, o AVD) donde poder realizar fácilmente estas tareas. Para ello, volveremos a acceder al &lt;i&gt;AVD Manager&lt;/i&gt;, y en la sección &lt;i&gt;Virtual Devices&lt;/i&gt;  podremos añadir tantos AVD como se necesiten (por ejemplo, configurados   para distintas versiones de Android). Para configurar el AVD tan sólo   tendremos que indicar un nombre descriptivo, el target de Android que   utilizará, y las características de hardware del dispositivo virtual,   como por ejemplo su resolución de pantalla, el tamaño de la tarjeta SD, o   la disponibilidad de GPS.&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/crear-avd.gif"&gt;&lt;img alt="crear-avd" class="alignnone size-medium wp-image-1725" height="300" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/crear-avd-232x300.gif" title="crear-avd" width="232" /&gt;&lt;/a&gt;&lt;br /&gt;Y con este paso ya estamos preparados para crear nuestro primer proyecto para Android.&lt;br /&gt;&lt;b&gt;Paso 7. ¡Hola Mundo! en Android.&lt;/b&gt;&lt;br /&gt;Creamos un nuevo proyecto de tipo &lt;i&gt;Android Project&lt;/i&gt;.   Indicamos su nombre, el target deseado, el nombre de la aplicación, el   paquete java por defecto para nuestras clases y el nombre de la clase (&lt;i&gt;Activity&lt;/i&gt;) principal.&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/hola-mundo-android.gif"&gt;&lt;img alt="hola-mundo-android" class="alignnone size-medium wp-image-1727" height="300" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/hola-mundo-android-214x300.gif" title="hola-mundo-android" width="214" /&gt;&lt;/a&gt;&lt;br /&gt;Esta  acción creará toda la estructura de carpetas necesaria para  compilar un  proyecto para Android. Hablaremos de ella más adelante.&lt;br /&gt;Para ejecutar el proyecto tal cual podremos hacerlo como cualquier otro proyecto java configurando una nueva entrada de tipo &lt;i&gt;Android Applications&lt;/i&gt; en la ventana de &lt;i&gt;Run Configurations&lt;/i&gt;. Al ejecutar el proyecto, se abrirá un nuevo emulador Android y se cargará automáticamente nuestra aplicación.&lt;br /&gt;&lt;a href="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/emulador-avd-andoid.jpg"&gt;&lt;img alt="emulador-avd-andoid" class="alignnone size-medium wp-image-1728" height="210" src="http://www.sgoliver.net/blog/wp-content/uploads/2010/08/emulador-avd-andoid-300x210.jpg" title="emulador-avd-andoid" width="300" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8528589384944803945-6030403963835847133?l=apps-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apps-games.blogspot.com/feeds/6030403963835847133/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://apps-games.blogspot.com/2011/04/programacion-para-android-entorno-de.html#comment-form' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/6030403963835847133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8528589384944803945/posts/default/6030403963835847133'/><link rel='alternate' type='text/html' href='http://apps-games.blogspot.com/2011/04/programacion-para-android-entorno-de.html' title='1. - Entorno de desarrollo Android'/><author><name>Gabriel</name><uri>http://www.blogger.com/profile/14884294654690953722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
