jueves, 2 de octubre de 2014

Plantillas con distribución lineal

Una plantilla LinearLayout es una vista de grupo donde todas sus vistas hija se alinean en una sola dirección: horizontal o vertical. Utilizaremos el atributo android:orientation para especificar la orientación de su contenido.


En este tipo de plantillas, las vistas hija son apiladas unas tras otras. Es decir,  si la orientación es vertical, habrá varias filas, una por cada vista hija, apiladas en una sola columna, y si la orientación es horizontal, tendremos varias columnas, una por cada vista hija, apiladas en una sola fila. Una plantilla LinearLayout respetará los márgenes (android:layout_marginLeft, android:layout_marginRight, etc) y las alineaciones (android:layout_gravity) de sus vistas hija con respecto a su vista padre.

Asignación de pesos.

A las vistas hija de una plantilla de tipo LinearLayout se les puede asignar un peso: atributo android:layout_weight. Este peso es un valor entero que determinará el espacio que ocupa la vista dentro de su vista padre. A mayor peso, mayor será el espacio que ocupe la vista en su vista padre. El peso por defecto es 0 y significa que el tamaño de la vista se ajustará a su contenido.

Por ejemplo, si contamos con tres campos de texto y dos de ellos declaran un peso de 1, mientras que al tercero no se le ha asignado peso, éste último se acabará ajustando a su propio contenido y los otros dos se repartirán el espacio sobrante por igual. Supongamos que hubiésemos asignado un peso de 2 al tercer campo en lugar de 0, en este caso, al ser la suma total de pesos igual a 4, dividiremos el espacio total en 4 partes imaginarias de las cuales, los dos primeros campos ocuparán 2 partes y el tercer campo otras 2. Es decir, que el tercer campo ocupa justo la mitad del espacio disponible y los dos primeros ocuparán una cuarta parte cada uno.

Truco. Para asignar el mismo espacio a todas las vistas contenidas en una plantilla con distribución lineal, procederemos de la siguiente manera:
  • Si la plantilla tiene orientación vertical, asignaremos el valor 0dp al atributo android:layout_height y el valor 1 al atributo android:layout_weight de todas las vistas hija.
  • Si la plantilla tiene orientación horizontal, asignaremos el valor 0dp al atributo adroid:layout_width y el valor 1 al atributo android:layout_weight de todas las vistas hija.

Ejemplo.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical" >
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/to" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/subject" />
    <EditText
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:gravity="top"
        android:hint="@string/message" />
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="@string/send" />
</LinearLayout>
El resultado quedaría de la forma:

Todas las vistas hija sin peso especificado (valor 0 por defecto) se ajustan a sus contenidos a excepción de la vista donde se muestra el mensaje, cuyo tamaño se ajustará a todo el espacio sobrante (la suma total de pesos en este caso vale 1).

No hay comentarios:

Publicar un comentario