Sie sind auf Seite 1von 115

Android

La telefona mvil est cambiando la sociedad actual de una forma


tan significativa como lo ha hecho Internet. Esta revolucin no ha
hecho ms que empezar, los nuevos terminales ofrecen unas
capacidades similares a las de un ordenador personal, lo que permite
que puedan ser utilizados para leer nuestro correo o navegar por
Internet. Pero a diferencia de un ordenador, un telfono mvil
siempre est en el bolsillo del usuario. Esto permite un nuevo abanico
de aplicaciones mucho ms cercanas al usuario.

Caractersticas de android
Como hemos comentado, existen muchas plataformas para mviles (iPhone, Symbian, Windows Phone,
BlackBerry, Palm, Java Mobile Edition, Linux Mobile (LiMo), etc.); sin embargo Android presenta una serie de
caractersticas que lo hacen diferente. Es el primero que combina, en una misma solucin, las siguientes
cualidades:
Plataforma realmente abierta. Es una plataforma de desarrollo libre basada en Linux y de cdigo abierto. Una de sus grandes
ventajas es que se puede usar y customizar el sistema sin pagar royalties.
Portabilidad asegurada. Las aplicaciones finales son desarrolladas en Java, lo que nos asegura que podrn ser ejecutadas en
una gran variedad de dispositivos, tanto presentes como futuros. Esto se consigue gracias al concepto de mquina virtual.
Arquitectura basada en componentes inspirados en Internet. Por ejemplo, el diseo de la interfaz de usuario se hace en
XML, lo que permite que una misma aplicacin se ejecute en un mvil de pantalla reducida o en un netbook.
Gran cantidad de servicios incorporados. Por ejemplo, localizacin basada tanto en GPS como en redes, bases de datos con
SQL, reconocimiento y sntesis de voz, navegador, multimedia, etc.
Aceptable nivel de seguridad. Los programas se encuentran aislados unos de otros gracias al concepto de ejecucin dentro
de una caja que hereda de Linux. Adems, cada aplicacin dispone de una serie de permisos que limitan su rango de
actuacin (servicios de localizacin, acceso a Internet, etc.).
Optimizado para baja potencia y poca memoria. Por ejemplo, Android utiliza la Mquina Virtual ART. Se trata de una
implementacin de Google de la mquina virtual de Java optimizada para dispositivos mviles.
Alta calidad de grficos y sonido. Grficos vectoriales suavizados, animaciones inspiradas en Flash, grficos en 3 dimensiones
basados en OpenGL. Incorpora los codees estndar ms comunes de audio y vdeo, incluyendo H.264 (AVC), MP3, AAC, etc.

Historia
Google adquiere Android Inc. en el ao 2005. Se trataba de una pequea compaa que acababa de ser creada, orientada a la
produccin de aplicaciones para terminales mviles. Ese mismo ao empiezan a trabajar en la creacin de una mquina virtual
Java optimizada para mviles (Dalvik VM).

En el ao 2007 se crea el consorcio Handset Alliance1 con el objetivo de desarrollar estndares abiertos para mviles. Est
formado por Google, Intel, Texas Instruments, Motorola, T-Mobile, Samsung, Ericsson, Toshiba, Vodafone, NTT DoCoMo, Sprint
Nextel y otros. Una pieza clave de los objetivos de esta alianza es promover el diseo y difusin de la plataforma Android. Sus
miembros se han comprometido a publicar una parte importante de su propiedad intelectual como cdigo abierto bajo la licencia
Apache v2.0.
En noviembre del 2007 se lanza una primera versin del Android SDK. Al ao siguiente aparece el primer mvil con Android (TMobile G1). En octubre, Google libera el cdigo fuente de Android, principalmente bajo licencia de cdigo abierto Apache (licencia
GPL v2 para el ncleo). Ese mismo mes, se abre Android Market para la descarga de aplicaciones. En abril del 2009, Google lanza la
versin 1.5 del SDK que incorpora nuevas caracterstica como el teclado en pantalla. A finales del 2009 se lanza la versin 2.0 y
durante el 2010 las versiones 2.1, 2.2 y 2.3.
Durante el ao 2010, Android se consolida como uno de los sistemas operativos para mviles ms utilizados, con resultados
cercanos al iPhone, e incluso superando al sistema de Apple en EE.UU.
En el 2011 se lanzan la versin 3.x especfica para tabletas y 4.x tanto para mviles como para tabletas. Durante este ao, Android
se consolida como la plataforma para mviles ms importante, alcanzando una cuota de mercado superior al 50%. En 2012,
Google cambia su estrategia en su tienda de descargas online, remplazando Android Market por Google Play Store, donde en un
solo portal unifica la descarga de aplicaciones como de contenidos.

Fuente de el estudio: Gratner Group

Versiones de Android
Un sistema operativo Android tiene tres tipos de denominar a las
versiones de Android, aunque las tres hacen referencia a la misma
versin:
La comercial con el nombre de postre. Por ejemplo: KitKat
La de los fabricantes (y tambin comercial) con la versin y subversin. Por
ejemplo: 4.4
La de desarrollador con el nivel del API (sta nos interesa mucho para
desarrollar en Android): Por ejemplo: 19

Arquitectura de android
El siguiente grfico muestra la arquitectura de Android. Como se
puede ver, est formada por cuatro capas. Una de las caiactersticas
ms importantes es que todas las capas estn basadas en software
libre.

El ncleo Linux
El ncleo de Android est formado por el sistema operativo Linux,
versin 2.6. Esta capa proporciona servicios como la seguridad, el
manejo de la memoria, el multiproceso, la pila de protocolos y el
soporte de para dispositivos.
Esta capa del modelo acta como capa de abstraccin entre el
hardware y el resto de la pila. Por lo tanto, es la nica que es
dependiente del hardware.

Runtime de Android
Est basado en el concepto de mquina virtual utilizado en Java. Dado las
limitaciones de los dispositivos donde ha de ejecutarse Android (poca
memoria y procesador limitado) no fue posible utilizar una mquina virtual
Java estndar. Google tom la decisin de crear una nueva, la mquina
virtual Dalvik, que respondiera mejor a estas limitaciones.
Algunas caractersticas de la mquina virtual Dalvik que facilitan esta
optimizacin de recursos son: que ejecuta ficheros Dalvik ejecutables (.dex)
(formato optimizado para ahorrar memoria). Adems, est basada en
registros. Cada aplicacin corre en su propio proceso Linux con su propia
instancia de la mquina virtual Dalvik. Delega al kernel de Linux algunas
funciones como threading y el manejo de la memoria a bajo nivel.
Tambin se incluye en el Runtine de Android el core libraries con la
mayora de las libreras disponibles en el lenguaje Java.

Google, con la nueva versin de Android, la 4.4 KitKat, incluy en las opciones de
desarrollador una nueva mquina virtual conocida como ART (Android Runtime)
que prescinde de la necesidad de una mquina virtual o de tener que interpretar
el cdigo de las aplicaciones. Esto es posible gracias a que, mientras que Dalvik
interpreta el cdigo al tiempo que inicia la aplicacin, ART trabaja en modo
AOD (Ahead Of Time), lo que significa que hace una pre-compilacin en el
momento de instalar la aplicacin, por lo que a la hora de ejecutarla, se ahorra
ese trabajo de tener que ejecutar e interpretar.
El uso de ART puede hacer que las aplicaciones tarden un poco ms en instalarse,
pero una vez hecho, se ejecutarn mucho ms rpido, casi como si fueran nativas
y estuvieran embebidas en el cdigo. Esto se traduce en una mejora importante
de la multitarea y en un significativo ahorro de batera, lo cual ser
muy beneficioso para dispositivos de gama media y gama baja, haciendo que
sean capaces de ejecutar aplicaciones que antes no podan.

Libreras nativas
Incluye un conjunto de libreras en C/C++ usadas en varios componentes de Android. Estn
compiladas en el cdigo nativo del procesador. Muchas de las libreras utilizan proyectos de
cdigo abierto. Algunas de estas libreras son:

System C library: una derivacin de la librera BSD de C estndar (libe), adaptada para dispositivos embebidos
basados en Linux.
Media Framework: librera basada en PacketVideo's OpenCORE; soporta codees de reproduccin y grabacin
de multitud de formatos de audio, vdeo e imgenes MPEG4, H.264, MP3, AAC, AMR, JPG y PNG.
Surface Manager: maneja el acceso al subsistema de representacin grfica en 2D y 3D.
WebKit: soporta un moderno navegador web utilizado en el navegador Android y en la vista webview. Se trata
de la misma librera que utiliza Google Chrome y Safari de Apple.
SGL: motor de grficos 2D.
Libreras 3D: implementacin basada en OpenGL ES 1.0 API. Las libreras utilizan el acelerador hardware 3D si
est disponible, o el software altamente optimizado de proyeccin 3D.
FreeType: fuentes en bitmap y renderizado vectorial.
SQLite potente y ligero motor de bases de datos relacinales disponible para todas las aplicaciones.
SSL: proporciona servicios de encriptacin Secure Socket Layer.

Entrono de aplicacin
Proporciona una plataforma de desarrollo libre para aplicaciones con gran riqueza
e innovaciones (sensores, localizacin, servicios, barra de notificaciones, etc.).
Esta capa ha sido diseada para simplificar la reutilizacin de componentes. Las
aplicaciones pueden publicar sus capacidades y otras pueden hacer uso de ellas
(sujetas a las restricciones de seguridad). Este mismo mecanismo permite a los
usuarios remplazar componentes.
Los servicios ms importantes que incluye son:
Views: extenso conjunto de vistas (parte visual de los componentes).
Resource Manager: proporciona acceso a recursos que no son en el cdigo.
Activity Manager: maneja el ciclo de vida de las aplicaciones y proporciona un sistema de
navegacin entre ellas.
Notification Manager: permite a las aplicaciones mostrar alertas personalizadas en la barra
de estado.
Content Providers: mecanismo sencillo para acceder a datos de otras aplicaciones (como los
contactos)

Aplicaciones
Este nivel est formado por el conjunto de aplicaciones instaladas en
una mquina Android. Todas las aplicaciones han de ser ejecutadas
en la mquina virtual Dalvik para garantizar la seguridad del sistema.
Normalmente, las aplicaciones Android estn escritas en Java. Para
desarrollar aplicaciones en Java podemos utilizar el Android SDK.
Existe otra opcin consistente en desarrollar las aplicaciones
utilizando C/C++. Para esta opcin podemos utilizar el Android NDK
(Native Development Kit).

Entorno de Desarrollo

Android Studio
Android Studio
Android Studio es un entorno de desarrollo integrado para la plataforma Android.

Caractersticas

Renderizacin en tiempo real


Consola de desarrollador: consejos de optimizacin, ayuda para la traduccin, estadsticas de uso.
Soporte para construccin basada en Gradle.
Plantillas para crear diseos comunes de Android y otros componentes.
Soporte para programar aplicaciones para Android Wear.

Plataformas soportadas
Android Studio est disponible para Windows 2003, Vista, 7, 8 y GNU/Linux, tanto plataformas de 32 como de 64 bits, Mac
OS X, desde 10.8.5 en adelante.

Requisitos del sistema

2 GB de RAM (4 GB recomendados)
400 MB de espacio en disco
1 GB para Android SDK
Monitor de 1280x800
Java Development Kit 7

Crear un nuevo proyecto

Para crear un nuevo proyecto ejecutaremos Android Studio y desde la


pantalla de bienvenida pulsaremos la opcin Start a new Android
Studio project para iniciar el asistente de creacin de un nuevo
proyecto.

En la primera pantalla indicaremos, por este orden, el nombre de la


aplicacin, el dominio de la compaa, y la ruta donde crear el
projecto.

En la siguiente pantalla del asistente configuraremos las plataformas y


APIs que va a utilizar nuestra aplicacin. Nosotros nos centraremos en
aplicaciones para telfonos y tablets, en cuyo caso tan slo
tendremos que seleccionar la API mnima (es decir, la versin mnima
de Android) que soportar la aplicacin.

La versin mnima que seleccionemos en esta pantalla implicar que


nuestra aplicacin se pueda ejecutar en ms o menos dispositivos. De
esta forma, cuanto menor sea sta, a ms dispositivos podr llegar
nuestra aplicacin, pero ms complicado ser conseguir que se
ejecute correctamente en todas las versiones de Android. Para
hacernos una idea del nmero de dispositivos que cubrimos con cada
versin podemos pulsar sobre el enlace Help me choose, que
mostrar el porcentaje de dispositivos que ejecutan actualmente cada
versin de Android.

En la siguiente pantalla del asistente elegiremos el tipo


de actividad principal de la aplicacin. Entenderemos por ahora que
una actividad es una ventana o pantalla de la aplicacin. Para
empezar seleccionaremos Empty Activity, que es el tipo ms sencillo.

Por ltimo, en el siguiente paso del asistente indicaremos los datos


asociados a esta actividad principal que acabamos de elegir,
indicando el nombre de su clase java asociada (Activity Name) y el
nombre de su layout xml.

Una vez configurado todo pulsamos el botn Finish y Android Studio


crear por nosotros toda la estructura del proyecto y los elementos
indispensables que debe contener.

Proyecto

Modulo

Esta carpeta contendr todo el


cdigo fuente de la aplicacin,
clases auxiliares, etc.
Inicialmente, Android Studio
crear el cdigo bsico de la
pantalla principal de la
aplicacin, y siempre bajo la
estructura del paquete java
definido durante la creacin del
proyecto.

Contiene todos los ficheros de


recursos necesarios para el
proyecto: imgenes, layouts,
cadenas de texto, etc.

/res/drawable/
Contiene las imgenes y otros elementos grficos usados por la
aplicacin. Para poder definir diferentes recursos dependiendo de la
resolucin y densidad de la pantalla del dispositivo se suele dividir en
varias subcarpetas:
/drawable (recursos independientes de la densidad)
/drawable-ldpi (densidad baja)
/drawable-mdpi (densidad media)
/drawable-hdpi (densidad alta)
/drawable-xhdpi (densidad muy alta)
/drawable-xxhdpi (densidad muy muy alta)

/res/mipmap/
Contiene los iconos de lanzamiento de la aplicacin (el icono que
aparecer en el men de aplicaciones del dispositivo) para las
distintas densidades de pantalla existentes. Al igual que en el caso de
las carpetas /drawable, se dividir en varias subcarpetas dependiendo
de la densidad de pantalla:
/mipmap-mdpi
/mipmap-hdpi
/mipmap-xhdpi

/res/layout/
Contiene los ficheros de definicin XML de las diferentes pantallas de
la interfaz grfica.

/res/values/
Contiene otros ficheros XML de recursos de la aplicacin, como por
ejemplo cadenas de texto (strings.xml), estilos (styles.xml), colores
(colors.xml), tamaos (dimens.xml), etc.

Fichero /app/src/main/AndroidManifest.xml
Contiene la definicin en XML de muchos de los aspectos principales
de la aplicacin, como por ejemplo su identificacin (nombre, icono,
etc), sus componentes (pantallas, servicios, etc.), o los permisos
necesarios para su ejecucin.

Fichero /app/build.gradle
Contiene informacin necesaria para la compilacin del proyecto, por
ejemplo la versin del SDK de Android utilizada para compilar, la
mnima versin de Android que soportar la aplicacin, referencias a
las libreras externas utilizadas, etc.
En un proyecto pueden existir varios ficheros build.gradle, para
definir determinados parmetros a distintos niveles. Por ejemplo, en
nuestro proyecto podemos ver que existe un fichero build.gradle a
nivel de proyecto, y otro a nivel de mdulo dentro de la carpeta /app.
El primero de ellos definir parmetros globales a todos los mdulos
del proyecto, y el segundo slo tendr efecto para cada mdulo en
particular.

Carpeta /app/libs
Puede contener las libreras java externas (ficheros .jar) que utilice
nuestra aplicacin. Normalmente no incluiremos directamente aqu
ninguna librera, sino que haremos referencia a ellas en el
fichero build.gradle , de forma que entren en el proceso de
compilacin de nuestra aplicacin.

Carpeta /app/build/
Contiene una serie de elementos de cdigo generados automticamente al
compilar el proyecto. Cada vez que compilamos nuestro proyecto, la maquinaria
de compilacin de Android genera por nosotros una serie de ficheros fuente java
dirigidos, entre otras muchas cosas, al control de los recursos de la aplicacin.
Importante: dado que estos ficheros se generan automticamente tras cada
compilacin del proyecto es importante que no se modifiquen manualmente bajo
ninguna circunstancia.
A destacar sobre todo el fichero llamado R.java, donde se define la clase R. Esta
clase R contendr en todo momento una serie de constantes con los
identificadores (ID) de todos los recursos de la aplicacin incluidos en la carpeta
/app/src/main/res/, de forma que podamos acceder fcilmente a estos recursos
desde nuestro cdigo java a travs de dicho dato. As, por ejemplo, la
constante R.layout.activity_main contendr el ID del layout activity_main.xml
contenido en la carpeta /app/src/main/res/layout/.

XML

Partes de un archivo XML

Prologo
El prlogo es una declaracin XML no
obligatoria que especifica algunas
caractersticas del documento, como por
ejemplo la versin de XML que se usa o el
tipo de encriptado.
Esta expresin usa como inicio la palabra
reservada xml y un signo de
interrogacin de apertura ?. El atributo
version hace referencia al estndar XML
usado y enconding indica el estndar de
encriptado..
Existen varias formas de encriptado, pero
normalmente el estndar usado es
UNICODE. Los formatos mas populares
son el UTF-8 y UTF-16. El primer formato
representa cada carcter con 8 bytes y el
segundo con 16 bytes.

Comentarios
Para usar comentarios abrimos con
la expresin <! y cerramos con
los caracteres > . Todo el texto
que este comprendido entre estos
smbolos ser ignorado
Los comentarios son mensajes
destinados al entendimiento del
cdigo por parte del programador.
Solo tiene fin informativo, as que
sern pasados por alto a la hora del
anlisis XML.

Building Blocks
Son la base de un documento XML,
ya que al fin y al cabo ellos
representan nuestra informacin.
Un elemento ser descrito por una
etiqueta inicial envuelta en
parntesis angulares <elemento> y
una etiqueta de cierre con una
barra inclinada antecedida al
nombre del elemento
</elemento>.
Y al texto que se encuentra en el
interior del elemento se le llama
contenido.

Building
Blocks

Cada archivo XML est formado por un


rbol de elementos que especifican la
manera en la que los elementos de la UI y
contenedores se acomodarn para definir
la parte visual de un objeto View.
La estructura del archivo XML es con un
elemento principal que hace de raz y una
serie de elementos que se incluyen unos
dentro de otros a diferentes niveles de
profundidad. Lo ms importante aqu es
que slo tenemos un elemento raz del
que dependern, directa o
indirectamente, el resto de vistas. Lo
habitual es que ese elemento sea un
diseo que define la organizacin
principal de la actividad y que contiene el
resto de objetos.

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LytContenedor"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView android:id="@+id/LblNombre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nombre" />

<EditText android:id="@+id/TxtNombre"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
<Button android:id="@+id/BtnAceptar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/aceptar" />
</LinearLayout>

El aspecto y el comportamiento de las vistas, se


pueden personalizar mediante propiedades. En el
archivo XML las propiedades se representan mediante
atributos de las etiquetas que se corresponden con las
vistas.
Para modificar una propiedad slo tenemos que darle
un valor al atributo correspondiente, incluyndolo
dentro de la etiqueta XML que representa la vista.
Hay que tener en cuenta, que cuando hablo del
nombre del atributo me refiero a lo que va a
continuacin de android:. Este prefijo que llevan
todos los atributos del archivo XML es el espacio de
nombres en el que se definen.
Los espacios de nombres se definen en esquemas
XML que incluyen las etiquetas disponibles, los
atributos que puede tener cada etiqueta y qu
etiquetas pueden estar contenidas dentro de otras. En
nuestro archivo XML, anteponer el prefijo android:
sirve para especificar el espacio de nombres donde se
declara el atributo. El espacio de nombres est
declarado en el atributo xmlns de la etiqueta
<LinearLayout> y aunque pueda parecer una URL
(direccin web) en realidad slo es un identificador
con forma de URL.

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LytContenedor"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView android:id="@+id/LblNombre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nombre" />

<EditText android:id="@+id/TxtNombre"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />

<Button android:id="@+id/BtnAceptar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/aceptar" />
</LinearLayout>

Atributo id
Una de las propiedades que proporciona la clase View es android:id, se trata de un identificador
para las vistas, aunque no es obligatorio en el archivo XML, asignar un identificador a una vista
sirve para poder hacer referencia a ella tanto en el propio archivo XML como en la actividad que
lo utilice.
Para poder usar el identificador XML desde el cdigo Java, el compilador genera una clase
llamada R en la que se incluye una constante por cada atributo Id del archivo XML. El mtodo
findViewById de la clase Activity nos permite obtener la vista que necesitamos a partir de estas
constantes de la clase R.
En resumen, si asignamos a un atributo Id una cadena como @+id/principal, el compilador le
asignar un nmero a la vista, por ejemplo el 0x7f050000 (2.131.034.112 en hexadecimal), y
crear una constante de nombre R.layout.principal en el archivo R.java. La constante ser de tipo
int y tendr el valor 0x7f050000. Adems, cuando se cree el objeto correspondiente a la vista, se
le asignar el nmero 0x7f050000 como identificador.
Si ms adelante usamos una cadena como @id/principal en otro atributo, el compilador
reconocer el nombre del recurso y lo remplazar por el mismo valor numrico, 0x7f050000, para
pasrselo al mtodo que se corresponda con el atributo.

Android Manfest
Es un archivo XML que contiene nodos descriptivos sobre las caractersticas de una aplicacin Android. Caractersticas como los building
blocks existentes, la versin de SDK usada, los permisos necesarios para ejecutar algunos servicios y muchas ms. En pocas palabras el
Android Manifest es un panorama de toda nuestra aplicacin.

Todas las aplicaciones deben contener este archivo por convencin. El nombre debe permanecer intacto, ya que se usa como referencia
para el parsing de nuestra aplicacin. El nodo raz de este documento se representa con la etiqueta <manifest> y por obligacin debe
contener un hijo de tipo <application>.

xmlsn:Android: No debemos cambiarlo nunca, ya que es el namespace del archivo.


package indica el nombre del paquete Java que soporta a nuestra aplicacin. El nombre del paquete debe ser nico y un diferenciador a largo plazo.

La etiqueta <application> representa como estar construida nuestra aplicacin. Dentro de ella definiremos nodos referentes a
las actividades que contiene, las libreras incluidas, los Intents, y dems componentes.

Algunos atributos de la etiqueta <application> son:

allowBackup: Este atributo puede tomar los valores de true o false. Indica si la aplicacin ser persistente al cerrar nuestro AVD.
icon: Indica donde est ubicado el icono que se usar en la aplicacin. Debemos indicar la ruta y el nombre del archivo que representa el icono. En este caso
apuntamos a las carpetas drawable donde se encuentra ic_launcher.png. Icono por defecto que nos proporciona Android Studio.
label: Es el nombre de la aplicacin que ver el usuario en su telfono.
theme: Este atributo apunta al archivo de recursos styles.xml, donde se define la personalizacin del estilo visual de nuestra aplicacin.

Dentro de <application> encontraremos expresada la actividad principal que definimos al crear el proyecto.
<activity> tiene dos atributos: name, el cual se refiere a la clase Java que hace referencia a esta. Y el atributo label que hace referencia al
texto que se mostrar en la cabecera de la actividad.

Inflar cdigo Java


Inflar cdigo Java significa parsear uno a uno los elementos de un
archivo layout XML, para generar el cdigo Java necesario.
Quien se encarga de este trabajo es el mtodo setContentView() de la
clase Activity. El analiza el archivo XML, traduce a objetos cada
componente, le asigna los atributos, establece contenedores y todas
las relaciones padre e hijo necesarias. Este mtodo lo usaremos en la
seccin onCreate() de cada actividad.

Los archivos XML se analizan e


interpretan por una herramienta
llamada Parser(Analizador de
sintaxis). Su objetivo es leer los
elementos en el documento.
Para ello interpreta su jerarqua
y aplica el formato establecido
para cada dato. Los parsers nos
ayudan a obtener la informacin
de un documento XML de forma
automatizada en un contexto.

Correr nuestra aplicacin en


nuestro movil

Activar opciones de desarrollador


Para poder probar nuestras aplicaciones directo en nuestro movil,
tendremos que activar la opcin de desarrollador en el.
Lo nico que tenemos que hacer para activar las opciones de
desarrollo es tomar nuestro terminal Android y entrar en Ajustes >
Informacin del telfono > Nmero de compilacin. Si hacemos
varios clics encima del Nmero de compilacin, nos dir que
efectivamente los ajustes de desarrollo se acaban de habilitar.

Si volvemos para atrs (dentro de Ajustes), veremos como hacia abajo


de todo nos apareceOpciones de desarrollo y si hacemos clic y las
activamos, veremos que podemos acceder a muchas ms
caractersticas que antes dentro de nuestro terminal.

Una vez tenemos las Opciones de Desarrollo activadas, solamente


tenemos que entrar dentro y hacer clic en la casilla de Depuracin
USB para activarla.

Elegir en Android Studio

Primer ejercicio

Presentacin Visual
LinearLayout: Los layout son
elementos no visibles que
determinan cmo se van a
distribuir en el espacio los
controles que incluyamos en su
interior.
En este caso,
un LinearLayout distribuir los
controles simplemente uno tras
otro y en la orientacin que
indique su
propiedad android:orientation, que
en este caso ser vertical.

Dentro del layout hemos incluido 3 controles: una


etiqueta (TextView), un cuadro de texto (EditText),
y un botn (Button). En todos ellos hemos
establecido las siguientes propiedades:
android:id. ID del control, con el que podremos
identificarlo ms tarde en nuestro cdigo. Vemos que el
identificador lo escribimos precedido de @+id/. Esto
tendr como efecto que al compilarse el proyecto se
genere automticamente una nueva constante en la
clase R para dicho control.
android:layout_height y android:layout_width.
Dimensiones del control con respecto al layout que lo
contiene (height=alto, width=ancho). Esta propiedad
tomar normalmente los valores wrap_content para
indicar que las dimensiones del control se ajustarn al
contenido del mismo, o bien match_parent para
indicar que el ancho o el alto del control se ajustar al
alto o ancho del layout contenedor respectivamente.
android:inputType, que indica qu tipo de contenido va
a albergar el control, en este caso ser texto normal
(valor text), aunque podra haber sido una
contrasea (valor textPassword), un telfono
(phone), una fecha (date), etc.
android:text, que indica el texto que aparece en el
control.

Segunda pantalla

Pulsaremos el botn derecho sobre la


carpeta /src/main/java/tu.paquete.java/ y seleccionaremos la opcin
de men New / Activity / Empty Activity.

Logica
Lo primero que encontramos en
nuestro fichero java es la definicin
de una nueva
clase MainActivity que extiende en
este caso de un tipo especial
de Activity
llamado AppCompatActivity, que
soporta entre otras cosas la
utilizacin de la Action Bar en
nuestras aplicaciones, la action
bar es la barra de ttulo y men
superior que se utiliza en la
mayora de aplicaciones Android.

El mtodo onCreate(), es llamado


cuando se crea por primera vez la
actividad.
Con llamada del
mtodo setContentView(R.layout.a
ctivity_main) estaremos indicando
a Android que debe establecer
como interfaz grfica de esta
actividad la definida en el
recurso R.layout.activity_main, que
no es ms que la que hemos
especificado en el
fichero/src/main/res/layout/activit
y_main.xml.

Primero obtendremos una


referencia a los diferentes
controles de la interfaz que
necesitemos manipular, en nuestro
caso slo el cuadro de texto y el
botn. Para ello definiremos ambas
referencias como atributos de la
clase y para obtenerlas
utilizaremos el
mtodo findViewById() indicando
el ID de cada control, definidos
como siempre en la clase R.

Implementaremos el
evento onClick de dicho botn.
Este botn tendr que ocuparse
de abrir la
actividad activity_saludo
pasndole toda la informacin
necesaria.

La comunicacin entre los distintos


componentes y aplicaciones en Android
se realiza mediante intents, por lo que el
primer paso es crear un objeto de este
tipo. Existen varias variantes del
constructor de la clase Intent, cada una
de ellas dirigida a unas determinadas
acciones. En este caso vamos a utilizar
el intent para iniciar una actividad desde
otra actividad de la misma aplicacin,
para lo que pasaremos a su constructor
una referencia a la propia
actividad llamadora (MainActivity.this), y
la clase de la
actividad llamada (SaludoUsuario.class).

Para enviar informacin entre


activities creamos un objeto Bundle,
que puede contener una lista de
pares clave-valor con toda la
informacin a pasar entre actividades.
En nuestro caso aadimos un dato de
tipo String mediante el
mtodo putString(clave, valor). Como
clave para nuestro dato que puede ser
cualquier cadena, despus el valor del
edittext lo obtenemos consultando el
contenido del cuadro de texto de la
actividad principal, lo que podemos
conseguir llamando a su
mtodo getText() y convirtiendo este
contenido a texto mediante toString()

Aadiremos la informacin al
intent mediante el
mtodo putExtras(). Si
necesitramos pasar ms datos
entre una actividad y otra no
tendramos ms que repetir
estos pasos para todos los
parmetros necesarios.

Segunda Pantalla

Obtendremos las referencias a


los objetos que manipularemos,
esta vez slo la etiqueta de texto

Layouts
Los layouts son elementos no visuales destinados a controlar la
distribucin, posicin y dimensiones de los controles que se insertan
en su interior. Estos componentes extienden a la clase
base ViewGroup, como muchos otros componentes contenedores, es
decir, capaces de contener a otros controles.

FrameLayout
Un FrameLayout coloca todos sus
controles hijos alineados con su esquina
superior izquierda, de forma que cada
control quedar oculto por el control
siguiente
Por ello, suele utilizarse para mostrar un
nico control en su interior
Los componentes incluidos en
un FrameLayout podrn establecer sus
propiedades android:layout_width
y android:layout_height, que podrn
tomar los valores match_parent (para
que el control hijo tome la dimensin de
su layout contenedor) o wrap_content
(para que el control hijo tome la
dimensin de su contenido). Veamos un
ejemplo:

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<EditText android:id="@+id/TxtNombre"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inputType="text" />

</FrameLayout>

LinearLayout
Este layout apila uno tras otro todos sus elementos hijos en
sentido horizontal o vertical segn se establezca su
propiedadandroid:orientation.
En el caso de un LinearLayout, tendremos otro parmetro con el que
jugar, la propiedadandroid:layout_weight. Esta propiedad nos va a
permitir dar a los elementos contenidos en el layout unas
dimensiones proporcionales entre ellas.

LinearLayout
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText android:id="@+id/TxtDato1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inputType="text"
android:layout_weight="1" />
<EditText android:id="@+id/TxtDato2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inputType="text"
android:layout_weight="2" />
</LinearLayout>

TableLayout
Un TableLayout permite distribuir sus elementos hijos de forma tabular, definiendo las filas y columnas
necesarias, y la posicin de cada componente dentro de la tabla.
La estructura de la tabla se define indicando las filas que compondrn la tabla (objetos TableRow), y dentro
de cada fila las columnas necesarias, no existe ningn objeto especial para definir una columna sino que
directamente insertaremos los controles necesarios dentro del TableRow y cada componente insertado
corresponder a una columna de la tabla. .
Por norma general, el ancho de cada columna se corresponder con el ancho del mayor componente de
dicha columna, pero existen una serie de propiedades que nos ayudarn a modificar este comportamiento:
android:stretchColumns. Indicar las columnas que pueden expandir para absorber el espacio libre dejado por las dems
columnas a la derecha de la pantalla.
android:shrinkColumns. Indicar las columnas que se pueden contraer para dejar espacio al resto de columnas que se
puedan salir por la derecha de la pantalla.
android:collapseColumns. Indicar las columnas de la tabla que se quieren ocultar completamente

Todas estas propiedades del TableLayout pueden recibir una lista de ndices de columnas separados por
comas (ejemplo: android:stretchColumns=1,2,3) o un asterisco para indicar que debe aplicar a todas las
columnas (ejemplo: android:stretchColumns=*).
Otra caracterstica importante es la posibilidad de que una celda determinada pueda ocupar el espacio de
varias columnas de la tabla. Esto se indicar mediante la propiedadandroid:layout_span del componente
concreto que deber tomar dicho espacio.

<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TableRow>
<TextView android:text="Celda 1.1" />
<TextView android:text="Celda 1.2" />
<TextView android:text="Celda 1.3" />
</TableRow>
<TableRow>
<TextView android:text="Celda 2.1" />
<TextView android:text="Celda 2.2" />
<TextView android:text="Celda 2.3" />
</TableRow>
<TableRow>
<TextView android:text="Celda 3.1"
android:layout_span="2" />
<TextView android:text="Celda 3.2" />
</TableRow>
</TableLayout>

GridLayout
Este tipo de layout fue incluido a partir de la API 14 (Android 4.0) y
sus caractersticas son similares al TableLayout, ya que se utiliza
igualmente para distribuir los diferentes elementos de la interfaz de
forma tabular, distribuidos en filas y columnas.
En este caso, indicaremos el nmero de filas y columnas como
propiedades del layout, mediante android:rowCount y
android:columnCount.
Los diferentes elementos hijos se irn colocando ordenadamente por
filas o columnas (dependiendo de la propiedad android:orientation)

<GridLayout
xmlns:android="http://schemas.android.com/apk/res/andr
oid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:rowCount=3"
android:columnCount="3"
android:orientation="horizontal" >

<TextView android:text="Celda 1.1" />

<TextView android:text="Celda 1.2" />


<TextView android:text="Celda 1.3" />

<TextView android:text="Celda 2.1" />


<TextView android:text="Celda 2.2" />

<TextView android:text="Celda 2.3" />

<TextView android:text="Celda 3.1"


android:layout_columnSpan="2" />

<TextView android:text="Celda 3.2" />


</GridLayout>

Tendremos disponibles las


propiedades android:layout_row
Span y
android:layout_columnSpan par
a conseguir que una celda ocupe
el lugar de varias filas o
columnas.

<TextView
android:id="@+id/celda_1"
android:layout_columnSpan="2"
android:layout_rowSpan="3"
android:text="Celda 1" />

<TextView
android:id="@+id/celda_1"
android:layout_column="0"
android:layout_row="0"
android:text="Celda 1" />

Existe tambin una forma de


indicar de forma explcita la fila y
columna que debe ocupar un
determinado elemento hijo
contenido en el GridLayout, y se
consigue utilizando los
atributos android:layout_row y
android:layout_column.

<GridLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:rowCount=3"
android:columnCount="3"
android:orientation="horizontal" >
<TextView android:text="Celda 1.1" />
<TextView android:text="Celda 1.2" />
<TextView android:text="Celda 1.3" />
<TextView android:text="Celda 2.1" />
<TextView android:text="Celda 2.2" />
<TextView android:text="Celda 2.3" />
<TextView android:text="Celda 3.1"
android:layout_columnSpan="2" />
<TextView android:text="Celda 3.2" />
</GridLayout>

RelativeLayout
Este layout permite especificar la posicin de cada elemento de forma
relativa a su elemento padre o a cualquier otro elemento incluido en
el propio layout. De esta forma, al incluir un nuevo elemento X
podremos indicar por ejemplo que debe colocarse debajo del
elemento Y y alineado a la derecha del layout padre.

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText android:id="@+id/TxtNombre"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
<Button android:id="@+id/BtnAceptar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/TxtNombre"
android:layout_alignParentRight="true" />
</RelativeLayout>

Botones

Control Button
Un control de tipo Button es el
botn ms bsico que podemos
utilizar y normalmente contiene un
simple texto. En el ejemplo
siguiente definimos un botn con
el texto Click asignando su
propiedad android:text. Adems de
esta propiedad podramos utilizar
muchas otras como el color de
fondo (android:background), estilo
de fuente (android:typeface), color
de fuente (android:textcolor),
tamao de fuente
(android:textSize), etc

Control TogleButton
Un control de tipo ToggleButton es
un tipo de botn que puede
permanecer en dos posibles
estados, pulsado o no_pulsado. En
este caso, en vez de definir un slo
texto para el control definiremos
dos, dependiendo de su estado.
As, podremos asignar las
propiedades android:textOn y andr
oid:textoOff para definir ambos
textos. Veamos un ejemplo a
continuacin.

Control Switch
Un control Switch es muy similar
al ToggleButton anterior, donde
tan slo cambia su aspecto
visual, que en vez de mostrar un
estado u otro sobre el mismo
espacio, se muestra en forma de
deslizador o interruptor.

<Switch android:id="@+id/BtnSwitch"
android:textOn="@string/on"
android:textOff="@string/off"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

Control ImageButton
En un control de
tipo ImageButton podremos definir una
imagen a mostrar en vez de un texto, para
lo que deberemos asignar la
propiedad android:src.
Normalmente asignaremos esta
<ImageButton android:id="@+id/BtnImagen"
propiedad con el descriptor de algn
android:layout_width="wrap_content"
recurso que hayamos incluido en las
carpetas /res/drawable.
android:layout_height="wrap_content"
android:contentDescription="@string/icono_ok"
Adicionalmente, al tratarse de un control
de tipo imagen tambin deberamos
android:src="@drawable/ic_estrella" />
acostumbrarnos a asignar la
propiedad android:contentDescription
con una descripcin textual de la imagen,
de forma que nuestra aplicacin sea lo
ms accesible posible.

Agregar una imagen

Cabe decir adems, que aunque existe


este tipo especfico de botn para
imgenes, tambin es posible aadir una
imagen a un botn normal de
tipo Button, a modo de elemento
suplementario al texto (compound
drawable). Por ejemplo, si quisiramos
aadir un icono a la izquierda del texto de
un botn utilizaramos la propiedad
android:drawableLeft indicando como
valor el descriptor (ID) de la imagen que
queremos mostrar, y si fuera necesario
podramos indicar tambin el espacio
entre la imagen y el texto mediante la
propiedad android:drawablePadding

<Button android:id="@+id/BtnBotonMasImagen"
android:text="@string/click"
android:drawableLeft="@drawable/ic_estrella"
android:drawablePadding="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

Diferentes estilos de boton


Para definir diferentes imgenes de fondo dependiendo del estado
del botn.
Android nos da total libertad para hacer esto mediante el uso
de selectores. Un selector se define mediante un fichero XML
localizado en la carpeta /res/drawable, y en l se pueden establecer
los diferentes valores de una propiedad determinada de un control
dependiendo de su estado.

Image View
El control ImageView permite mostrar imgenes en la aplicacin.
La propiedad android:src, que permite indicar la imagen a mostrar.
Para indicar el origen de la imagen el identificador de un recurso de
nuestra carpeta /res/drawable, android:src=@drawable/unaimagen.
Existen algunas otras propiedades tiles en algunas ocasiones como las
destinadas a establecer el tamao mximo que puede ocupar la
imagen, android:maxWidth y android:maxHeigh
Para indicar cmo debe adaptarse la imagen al tamao del control,
android:scaleType (5=CENTER, 6=CENTER_CROP, 7=CENTER_INSIDE, ).
Adems, deberamos establecer siempre la
propiedad android:contentDescription para ofrecer una breve descripcin
textual de la imagen, algo que har nuestra aplicacin mucho ms
accesible.

Text View
Las etiquetas de texto, se utiliza para mostrar un determinado texto al
usuario
El texto del Text View se establece mediante la
propiedad android:text.
android:background (color de fondo)
android:textColor (color del texto)
android:textSize (tamao de la fuente)
android:typeface (estilo del texto: negrita, cursiva, ).

Edit Text
Permite la introduccin y edicin de texto por parte del usuario,
El el texto a mostrar se pone a travs del atributo android:text.
La propiedad android:inputType indica el tipo de contenido que se va a introducir en el
cuadro de texto, como por ejemplo una direccin de correo electrnico
(textEmailAddress), un nmero genrico (number), un nmero de telfono (phone), una
direccin web (textUri), o un texto genrico (text). El valor que establezcamos para esta
propiedad tendr adems efecto en el tipo de teclado que mostrar Android para editar
dicho campo.
Las propiedades drawableLeft o drawableRight nos permite especificar una imagen, a
izquierda o derecha, que permanecer fija en el cuadro de texto.
Otra opcin adicional ser indicar un texto de ayuda o descripcin (hint), que aparecer
en el cuadro de texto mientras el usuario no haya escrito nada (en cuanto se escribe algo
este texto desaparece). Para esto utilizaremos las propiedades android:hint para indicar
el texto y android:textColorHint para indicar su color.

CheckBox
Un control checkbox se suele utilizar para marcar o desmarcar
opciones en una aplicacin, y en Android est representado por la
clase del mismo nombre, CheckBox.

RadioButton
Al igual que los controles checkbox, un radio button puede estar
marcado o desmarcado, pero en este caso suelen utilizarse dentro de
un grupo de opciones donde una, y slo una, de ellas debe estar
marcada obligatoriamente, es decir, que si se marca una de las
opciones se desmarcar automticamente la que estuviera activa
anteriormente. En Android, un grupo de botones radio button se
define mediante un elemento RadioGroup, que a su vez contendr
todos los elementos RadioButton necesarios.

Visualizar/Ocultar un control en un layout


Para ocultar un control en un layout se pueden utilizar las siguientes
propiedades:
visible: muestra el control
invisible: oculta el control
gone: oculta el control y ste no ocupa espacio

<Button
android:id="@+id/btn"
android:layout_width="w
rap_content"
android:layout_height="
wrap_content
android:visibility="gon
e"/>

B=(Button)ventana.findViewById(
R.id.btnGeolocalizar);
B.setVisibility(View.VISIBLE);

Mensajes Toast
Un toast muestra un mensaje en un pequeo popup, cuyo tamao no
excede el contenido del mensaje y no interrumpe la ejecucin de la
aplicacin. Este tipo de mensjes son muy tiles cuando queremos
mostrar cualquier mensaje informativo, donde no se necesita la
interaccin del usuario.
Toast.makeText(context, text, duration).show();
En la variable duration puedes especificar cualquier nmero entero, pero generalmente se suelen usar uno
de las dos constantes de la clase Toast, LENGTH_SHORT y LENGTH_LONG.

Controles de seleccin

Adaptador
Un adaptador representa una interfaz comn al modelo de datos que
existe por detrs de todos los controles de seleccin.
Dicho de otra forma, todos los controles de seleccin accedern a los
datos que contienen a travs de un adaptador.
Adems de proveer de datos a los controles visuales, el adaptador
tambin ser responsable de generar a partir de estos datos las vistas
especficas que se mostrarn dentro del control de seleccin.

Android proporciona de serie varios tipos de adaptadores sencillos,


aunque podemos extender su funcionalidad facilmente para
adaptarlos a nuestras necesidades. Los ms comunes son los
siguientes:
ArrayAdapter. Es el ms sencillo de todos los adaptadores, y provee de datos
a un control de seleccin a partir de un array de objetos de cualquier tipo.
SimpleAdapter. Se utiliza para mapear datos sobre los diferentes controles
definidos en un fichero XML de layout.
SimpleCursorAdapter. Se utiliza para mapear las columnas de un cursor
abierto sobre una base de datos sobre los diferentes elementos visuales
contenidos en el control de seleccin.

Array Adapter
Al crear un adapator se le pasan 3 parmetros:
El contexto, que normalmente ser simplemente una referencia a la actividad
donde se crea el adaptador.
El ID del layout sobre el que se mostrarn los datos del control. Le pasamos el
ID de un layout predefinido en Android, formado nicamente por un
control TextView.
El array que contiene los datos a mostrar.

Lista Spinner
Las listas desplegables en Android se llaman Spinner. Funcionan de
forma similar a cualquier control de este tipo, el usuario selecciona la
lista, se muestra una especie de lista emergente al usuario con todas
las opciones disponibles y al seleccionarse una de ellas sta queda
fijada en el control.

Tabs
Se puede tener elementos organizativos bsicos de nuestra interfaz,
pero sin embargo, dado el poco espacio con el que contamos en las
pantallas de muchos dispositivos, o simplemente por cuestiones de
organizacin, a veces es necesario dividir nuestros controles en varias
pantallas.
Una de las formas clsicas de conseguir esto consiste en la
distribucin de los elementos por pestaas o tabs.
Android por supuesto permite utilizar este tipo de interfaces, aunque
lo hace de una forma un tanto peculiar, ya que la implementacin no
va a depender de un slo elemento sino de varios, que adems deben
estar distribuidos y estructurados de una forma determinada..

Estructura xml
En Android, el elemento principal de un conjunto de pestaas ser el
control TabHost. ste va a ser el contenedor principal de nuestro conjunto de
pestaas y deber tener obligatoriamente como id el valor
@android:id/tabhost.
Dentro de ste vamos a incluir un LinearLayout que nos servir para distribuir
verticalmente las secciones principales del layout: la seccin de pestaas en la
parte superior y la seccin de contenido en la parte inferior.
La seccin de pestaas se representar mediante un elemento TabWidget, que
deber tener como id el valor @android:id/tabs, y como contenedor para el
contenido de las pestaas aadiremos un FrameLayout con el id obligatorio
@android:id/tabcontent.
Por ltimo, dentro delFrameLayout incluiremos el contenido de cada pestaa,
normalmente cada uno dentro de su propio layout principal y con un id nico que
nos permita posteriormente hacer referencia a ellos fcilmente.

Estructura java
Empezaremos obteniendo una referencia al control
principal TabHost y preparndolo para su configuracin llamando a su
mtodo setup().
Tras esto, crearemos un objeto de tipo TabSpec para cada una de las
pestaas que queramos aadir mediante el mtodo newTabSpec(), al
que pasaremos como parmetro una etiqueta identificativa de la
pestaa
Adems, tambin le asignaremos el layout de contenido
correspondiente a la pestaa llamando al mtodo setContent(), e
indicaremos el texto y el icono que queremos mostrar en la pestaa
mediante el mtodo setIndicator(texto, icono)..

Das könnte Ihnen auch gefallen