GridLayout
Este tipo de layout fue
incluido a partir de la API 14 (Android 4.0) y sus características 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. La diferencia entre ellos estriba en la forma que tiene el GridLayout de
colocar y distribuir sus elementos hijos en el espacio disponible. En este
caso, a diferencia del TableLayout indicaremos el número de filas y
columnas como propiedades del layout, mediante android:rowCount y android:columnCount.
Con estos datos ya no es necesario ningún tipo de elemento para indicar las
filas, como hacíamos con el elemento TableRow del TableLayout,
sino que los diferentes elementos hijos se irán colocando ordenadamente por
filas o columnas (dependiendo de la propiedad android:orientation) hasta
completar el número de filas o columnas indicadas en los atributos anteriores.
Adicionalmente, igual que en el caso anterior, también tendremos disponibles
las propiedades android:layout_rowSpan y android:layout_columnSpan para
conseguir que una celda ocupe el lugar de varias filas o columnas.
Existe también una forma
de indicar de forma explícita 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. De
cualquier forma, salvo para configuraciones complejas del grid no suele ser
necesario utilizar estas propiedades.
LinearLayout
El siguiente tipo de
layout en cuanto a nivel de complejidad es el LinearLayout. Este layout
apila uno tras otro todos sus elementos hijos en sentido horizontal o
vertical según se establezca su propiedad android:orientation.
Al igual que en un FrameLayout,
los elementos contenidos en un LinearLayout pueden establecer sus
propiedades android:layout_width y android:layout_height para
determinar sus dimensiones dentro del layout.
Pero en el caso de un LinearLayout,
tendremos otro parámetro con el que jugar, la propiedad android:layout_weight.
Esta propiedad nos va a permitir dar a los elementos contenidos en el layout
unas dimensiones proporcionales entre ellas. Esto es más dificil de explicar
que de comprender con un ejemplo. Si incluimos en un LinearLayout vertical
dos cuadros de texto (EditText) y a uno de ellos le establecemos un layout_weight=”1″ y
al otro un layout_weight=”2″ conseguiremos como efecto que toda la
superficie del layout quede ocupada por los dos cuadros de texto y que además
el segundo sea el doble (relación entre sus propiedades weight) de alto
que el primero.
RelativeLayout
Este layout permite
especificar la posición 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.
En un RelativeLayout tendremos un sinfín de propiedades para colocar
cada control justo donde queramos.
FrameLayout
Éste es el más simple de
todos los layouts de Android. Un FrameLayout coloca todos sus
controles hijos alineados con su esquina superior izquierda, de forma que cada
control quedará oculto por el control siguiente (a menos que éste último tenga
transparencia). Por ello, suele utilizarse para mostrar un único control en su
interior, a modo de contenedor (placeholder) sencillo para
un sólo elemento sustituible, por ejemplo una imagen.
Los componentes
incluidos en un FrameLayout podrán establecer sus propiedades android:layout_widthy android:layout_height,
que podrán tomar los valores “match_parent” (para que el control hijo tome la
dimensión de su layout contenedor) o “wrap_content” (para que el control hijo
tome la dimensión de su contenido).
Include
Other Layout
Si
se refiere a la <include />, que sirve para incluir una
"sub-árbol" en el lugar donde se declara. En general, se utiliza a
menudo cuando se tiene un diseño que se puede reutilizar en otros diseños o
declarada por separado para una mejor organización.
Cuenta con el atributo
de diseño, donde se define la referencia al diseño que desee incluir.
Cuenta con el atributo
de diseño, donde se define la referencia al diseño que desee incluir.
Fragment
Son
componentes que funcionan dentro del ámbito de una
Activity. Su finalidad es la de ampliar parte de la lógica utilizada
para la navegación entre pantallas o Activities, pudiendo
definir varios Fragments dentro de una misma Activity, interaccionando entre ellos. Fueron introducidos
con la versión de Android 3.0 (API level 11), y
representan el comportamiento de una porción de la interfaz de usuario asociada
a una Activity.
Todo
Fragment debe estar embebido dentro de una Activity, por lo que el ciclo de
vida de un Fragment está ligado al de la Activity.
TableLayout
Un TableLayout permite
distribuir sus elementos hijos de forma tabular, definiendo las filas y
columnas necesarias, y la posición de cada componente dentro de la tabla.
La estructura de la
tabla se define de forma similar a como se hace en HTML, es decir, indicando
las filas que compondrán la tabla (objetos TableRow), y dentro de cada
fila las columnas necesarias, con la salvedad de que no existe ningún objeto
especial para definir una columna (algo así como un TableColumn) sino que
directamente insertaremos los controles necesarios dentro del TableRow y
cada componente insertado (que puede ser un control sencillo o incluso otro ViewGroup)
corresponderá a una columna de la tabla. De esta forma, el número final de
filas de la tabla se corresponderá con el número de elementos TableRowinsertados,
y el número total de columnas quedará determinado por el número de componentes
de la fila que más componentes contenga.
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 ayudarán a
modificar este comportamiento.
TableRow
Al igual que en un LinearLayout, en un TableLayout se
pueden incluir todo tipo de vistas. Sin embargo, hay una vista específica que
sólo se puede utilizar en TableLayout y que es la que aporta
la funcionalidad necesaria para crear la tabla: TableRow.
TableRow es, a su
vez, otra especialización de LinearLayout. Esta vez de un LinearLayout horizontal.
Así que resulta evidente que, lo que se nos vende como una estructura de tabla,
es en realidad un grupo de LinearLayout horizontales dentro de
un LinearLayout vertical.
Resulta evidente que cada TableRow representa
una fila de la tabla y que las vistas que contengan harán las veces de
columnas. En concreto, cada vista que se añade a un TableRow va
a parar a una columna diferente. Por ese motivo se suele decir que cada celda
de un TableLayout sólo puede contener una vista. No obstante,
nada impide que cualquiera de esas vistas sea un diseño y que contenga, a su
vez otras vistas dentro.
Lo que diferencia a TableLayout de una
estructura similar creada con varios LinearLayout es el
tratamiento global que le da a las vistas que se incluyen en todos los TableRow.
Para empezar, aunque cada TableRow tenga una cantidad
diferente de vistas en su interior, el conjunto se representará como una tabla
donde todas las filas tienen el mismo número de columnas. La cantidad total de
columnas que tendrá la tabla la determina el TableRow que más
vistas incluya. De forma similar, el ancho de cada columna también vendrá
determinado por la vista con mayor anchura de todas las incluidas en esa
columna, aún estando en diferentes TableRow.
Space
El
espacio es una subclase de vista ligera que se puede utilizar para crear
intervalos entre los componentes en los diseños de propósito general.