La publicación del blog de desarrolladores de Android que presentaGridLayout
este diagrama muestra cómo los intervalos afectan la asignación automática de índices:
Estoy intentando implementar eso usando un GridLayout
. Esto es lo que tengo hasta ahora:
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.commonsware.android.gridlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:orientation="horizontal"
app:columnCount="8">
<Button
app:layout_columnSpan="2"
app:layout_rowSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_1"/>
<Button
app:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_2"/>
<Button
app:layout_rowSpan="4"
android:text="@string/string_3"/>
<Button
app:layout_columnSpan="3"
app:layout_rowSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_4"/>
<Button
app:layout_columnSpan="3"
android:layout_gravity="fill_horizontal"
android:text="@string/string_5"/>
<Button
app:layout_columnSpan="2"
android:layout_gravity="fill_horizontal"
android:text="@string/string_6"/>
<android.support.v7.widget.Space
app:layout_column="0"
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
<android.support.v7.widget.Space
android:layout_width="36dp"
/>
</android.support.v7.widget.GridLayout>
Tuve que introducir los <Space>
elementos para asegurarme de que cada columna tuviera un ancho mínimo, de lo contrario, tendría un montón de columnas de ancho cero.
Sin embargo, incluso con ellos, obtengo esto:
Notablemente:
Sin embargo
android:layout_gravity="fill_horizontal"
, mis widgets con tramos de columna no llenan las columnas distribuidasA pesar de los
android:layout_rowSpan
valores, nada abarca filas.
¿Alguien puede reproducir el diagrama de la publicación del blog usando un GridLayout
?
¡Gracias!
fuente
Respuestas:
Se siente bastante extraño, pero logré obtener el aspecto correcto agregando una columna y una fila adicionales más allá de lo necesario. Luego llené la columna adicional con un espacio en cada fila que define una altura y llené la fila adicional con un espacio en cada columna que define un ancho. Para mayor flexibilidad, imagino que estos tamaños de espacio podrían configurarse en código para proporcionar algo similar a los pesos. Intenté agregar una captura de pantalla, pero no tengo la reputación necesaria.
fuente
Space
elementos. Agregué una captura de pantalla para futuros lectores. ¡Gracias!rowCount
establece en 8? Necesitamos 4 filas (el tamaño de la más granderowSpan
) más una adicional paraSpace
que sea 5. ¿Qué me falta?<Gridlayout>
en lugar de<android.support.v7.widget.GridLayout>
fuente
GridLayout
paquete de soporte de Android, el diseño se rompe, lo que sugiere que los dos no son completamente compatibles. Además, realmente espero que haya una manera de hacer esto que no implique tamaños de cableado de los widgets. Dejaré que esto pase un poco, para ver qué otras respuestas vienen (si las hay), pero aceptaré la tuya si no aparece nada mejor. ¡Gracias de nuevo!android:
atributos requeridos enapp:
unos, usando el espacio de nombres XML del backport. Funciona con el backport.Debe establecer tanto layout_gravity como layout_columntWeight en sus columnas
fuente
La biblioteca GridLayout de Android Support V7 facilita la distribución del espacio sobrante al adaptarse al principio del peso. Para hacer que una columna se estire, asegúrese de que los componentes dentro de ella definan un peso o una gravedad. Para evitar que una columna se estire, asegúrese de que uno de los componentes de la columna no defina un peso o una gravedad. Recuerde agregar dependencia para esta biblioteca. Agregue com.android.support:gridlayout-v7:25.0.1 en build.gradle.
fuente
A partir de API 21, GridLayout ahora admite el peso como LinearLayout. Para obtener más información, consulte el enlace siguiente:
https://stackoverflow.com/a/31089200/1296944
fuente