Beruflich Dokumente
Kultur Dokumente
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.
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
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.
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
Proyecto
Modulo
/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
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
<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>
<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>.
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.
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.
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.
Segunda pantalla
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.
Implementaremos el
evento onClick de dicho botn.
Este botn tendr que ocuparse
de abrir la
actividad activity_saludo
pasndole toda la informacin
necesaria.
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
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: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" />
<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.
<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" />
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.
<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.
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)..