Cómo hacer que el diseño de cuadrícula se vea genial en Android

GridLayout (android.widget.GridLayout) inicialmente parece ser una forma de crear tablas muy parecidas a TableLayout (android.widget.TableLayout). Sin embargo, es mucho más flexible que el control TableLayout. Por ejemplo, las celdas pueden abarcar filas, a diferencia de TableLayout. Sin embargo, su flexibilidad proviene del hecho de que realmente ayuda a alinear objetos a lo largo de las líneas de cuadrícula virtual creadas al crear una vista con GridLayout.

Paso 1: planificación del teclado

Algunas cosas notables para el diseño:

  • 5 filas, 4 columnas
  • Se utilizan tanto el intervalo de columnas como el intervalo de filas
  • No todas las celdas están pobladas

Al diseñar un diseño como este antes de que existiera GridLayout, sabríamos que el uso de TableLayout no sería factible debido al intervalo de filas. Es probable que recurramos al uso de una combinación anidada de controles LinearLayout, no el diseño más eficiente. Pero en Android 4.0, hay un control más eficiente que se adapta a nuestros propósitos: GridLayout.

Paso 2: identificación de una estrategia de cuadrícula

Para este teclado, si comenzamos en la celda de barra diagonal (/), y usamos orientación horizontal, no será necesario omitir celdas. Elegir horizontal significa que tenemos que limitar el número de columnas para obtener el ajuste automático a la siguiente fila en la ubicación correcta. En este ejemplo, hay 4 columnas.
Finalmente, queremos que el control de Vista en cada celda (en este caso, estos son controles de Botón) esté centrado y queremos que todo el diseño se adapte al contenido.
El siguiente XML define el contenedor GridLayout que necesitaremos:

<GridLayout xmlns:android=" http://schemas.android.com/apk/r… "

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:columnCount="4"

android:orientation="horizontal" >

Paso 3: Definir las celdas simples

El diseño actual no es exactamente lo que queremos. Los controles de botón /, +, 0 y = son todos especiales cuando se trata de distribuirlos correctamente. Echemos un vistazo a ellos:

  • El control del botón / (signo de división o barra diagonal) conserva su tamaño actual, pero debe comenzar en la cuarta columna.
  • El control del botón + (signo más) aparece primero en la dirección de orientación horizontal directamente después del botón 9, pero debe abarcar tres filas.
  • El control del botón 0 (cero) debe abarcar dos columnas.
  • El botón = (signo igual) debe abarcar tres columnas.

<?xml version="1.0" encoding="utf-8"?>

<GridLayout xmlns:android=" http://schemas.android.com/apk/r… "

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:columnCount="4"

android:orientation="horizontal" >

<Button

android:layout_column="3"

android:text="/" />

<Button android:text="1" />

<Button android:text="9" />

<Button

android:layout_rowSpan="3"

android:text="+" />

<Button

android:layout_columnSpan="2"

android:text="0" />

<Button android:text="00" />

<Button

android:layout_columnSpan="3"

android:text="=" />

Paso 5: rellenando los agujeros

Los valores de ancho y alto de los controles Button aún no son correctos. Puede pensar de inmediato que la solución es ajustar el layout_width y layout_height. Pero recuerde, los valores para el escalado automático, al igual que wrap_content y match_parent, ambos se comportan igual y ya están aplicados.

La solución es simple. En un contenedor GridLayout, el atributo layout_gravity ajusta cómo se debe colocar cada control de vista en la celda. Además de controlar el dibujo centrado o en la parte superior, y otros valores de posicionamiento, el atributo layout_gravity también puede ajustar el tamaño. Simplemente configure layout_gravity para que se llene de modo que cada control de vista de caso especial se expanda al tamaño del contenedor en el que se encuentra. En el caso de GridLayout, el contenedor es la celda.

Aquí está nuestro XML de diseño final:

<?xml version="1.0" encoding="utf-8"?>

<GridLayout xmlns:android=" http://schemas.android.com/apk/r… "

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:columnCount="4"

android:orientation="horizontal" >

<Button

android:layout_column="3"

android:text="/" />

<Button android:text="1" />

<Button android:text="2" />

<Button android:text="3" />

<Button android:text="*" />

<Button android:text="4" />

<Button android:text="5" />

<Button android:text="6" />

<Button android:text="-" />

<Button android:text="7" />

<Button android:text="8" />

<Button android:text="9" />

<Button

android:layout_gravity="fill"

android:layout_rowSpan="3"

android:text="+" />

<Button

android:layout_columnSpan="2"

android:layout_gravity="fill"

android:text="0" />

<Button android:text="00" />

<Button

android:layout_columnSpan="3"

android:layout_gravity="fill"

android:text="=" />

Y aquí está el resultado final:

Haga clic para obtener más actualizaciones en Android

Puede administrar GridLayout de forma estática o programática. El siguiente artículo contiene ejemplos sobre cómo hacerlo.

Ejemplo de Android Gridlayout mediante programación