Un Layout que coloca sus hijos en un enrejillado rectangular (como unas coordenadas).
Estructura
El enrejillado está compuesto por un conjunto de lineas de una anchura infinitesimal que separa la zona que ocupa el Layout en diferentes celdas.
Las líneas del enrejillado se llaman índices y en un enrejillado con N columnas, tendremos N + 1 índices, desde 0 hasta N.
Especificación de filas y columnas
Un hijo ocupa una o más celdas contiguas, esto se define con los atributos rowSpec y columnSpec.
Cada uno de estos atributos define cuantas filas y columnas va a ocupar un hijo.
IMPORTANTE
Aunque en un Grid Layout no se espera que las celdas que ocupa una View las pueda ocupar otra, Android Studio no impide que esto ocurra. Esto es un error de diseño y puede afectar de manera indeterminada al resultado final.
Asignación de celda por defecto
Si a un hijo no se le asignan los índices de fila y una columna, GridLayout asignará una localización por defecto teniendo en cuenta sus atributos orientation, rowCount and columnCount
Espacio
El espacio entre hijos tendrá que ser especificado utilizando márgenes con los parámetros: leftMargin, topMargin, rightMargin and bottomMargin.
Cuando la propiedad useDefaultMargins está definida, se colocarán los márgenes por defecto alrededor de los hijos, basado en la guía de estilo de UI que se esté utilizando.
Distribución del espacio sobrante
Desde API 21, el exceso de espacio se gestiona con el principio del peso.
En caso de que no se hayan especificado pesos, se respetarán las convenciones anteriores.
Interpretación de GONE
Para el propósito del Layout, se tratan las Views cuya visibilidad es GONE como si tuvieran cero anchura y altura.
Esto difiere de la política de ignorar las Views marcadas como GONE pero es necesario para el buen funcionamiento de este Layout.
USO DESDE XML
IMPORTANTE
Google recomienda el uso de Constraint Layout en exclusiva, sin embargo, se puede dar el caso de que un Relative Layout sea más sencillo de implementar y más útil.