two studio gridlayout ejemplo columns codigo 3x3 android android-gridlayout

android - studio - GridLayout y Row/Column Span Woe



gridlayout android studio ejemplo (5)

La publicación de Android Developers Blog que presenta GridLayout muestra este diagrama de cómo los GridLayout 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 elementos <Space> para asegurar 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, entiendo esto:

Notablemente:

  • A pesar de android:layout_gravity="fill_horizontal" , mis widgets con android:layout_gravity="fill_horizontal" columnas no llenan las columnas extendidas

  • A pesar de los valores de android:layout_rowSpan , nada abarca filas

¿Alguien puede reproducir el diagrama de la publicación del blog usando un GridLayout ?

¡Gracias!


A partir de API 21, GridLayout ahora admite el peso como LinearLayout. Para más detalles, consulte el siguiente enlace:

https://.com/a/31089200/1296944


Debe establecer tanto layout_gravity como layout_columntWeight en sus columnas

<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:text="سوم شخص" app:layout_gravity="fill_horizontal" app:layout_columnWeight="1" /> <TextView android:text="دوم شخص" app:layout_gravity="fill_horizontal" app:layout_columnWeight="1" /> <TextView android:text="اول شخص" app:layout_gravity="fill_horizontal" app:layout_columnWeight="1" /> </android.support.v7.widget.GridLayout>


La biblioteca GridLayout de soporte de Android V7 hace que la distribución de espacio excedente sea más fácil al acomodar el principio de peso. Para hacer que una columna se estire, asegúrese de que los componentes dentro de ella definen 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.

<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" app:columnCount="2" app:rowCount="2"> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="First" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="Second" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" android:text="Third" app:layout_columnWeight="1" app:layout_rowWeight="1" /> <TextView android:layout_width="0dp" android:layout_height="0dp" android:gravity="center" app:layout_columnWeight="1" app:layout_rowWeight="1" android:text="fourth"/> </android.support.v7.widget.GridLayout>


Se siente bastante raro, pero me las arreglé para obtener el aspecto correcto al agregar una columna y una fila extra más allá de lo que se necesita. Luego llené la columna extra 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 una mayor flexibilidad, imagino que estos tamaños de espacio se pueden configurar en código para proporcionar algo similar a los pesos. Traté de agregar una captura de pantalla, pero no tengo la reputación necesaria.

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:columnCount="9" android:orientation="horizontal" android:rowCount="8" > <Button android:layout_columnSpan="2" android:layout_gravity="fill" android:layout_rowSpan="2" android:text="1" /> <Button android:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:text="2" /> <Button android:layout_gravity="fill_vertical" android:layout_rowSpan="4" android:text="3" /> <Button android:layout_columnSpan="3" android:layout_gravity="fill" android:layout_rowSpan="2" android:text="4" /> <Button android:layout_columnSpan="3" android:layout_gravity="fill_horizontal" android:text="5" /> <Button android:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:text="6" /> <Space android:layout_width="36dp" android:layout_column="0" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="1" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="2" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="3" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="4" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="5" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="6" android:layout_row="7" /> <Space android:layout_width="36dp" android:layout_column="7" android:layout_row="7" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="0" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="1" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="2" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="3" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="4" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="5" /> <Space android:layout_height="36dp" android:layout_column="8" android:layout_row="6" /> </GridLayout>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > <GridLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:columnCount="8" android:rowCount="7" > <TextView android:layout_width="50dip" android:layout_height="50dip" android:layout_columnSpan="2" android:layout_rowSpan="2" android:background="#a30000" android:gravity="center" android:text="1" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="50dip" android:layout_height="25dip" android:layout_columnSpan="2" android:layout_rowSpan="1" android:background="#0c00a3" android:gravity="center" android:text="2" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="25dip" android:layout_height="100dip" android:layout_columnSpan="1" android:layout_rowSpan="4" android:background="#00a313" android:gravity="center" android:text="3" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="75dip" android:layout_height="50dip" android:layout_columnSpan="3" android:layout_rowSpan="2" android:background="#a29100" android:gravity="center" android:text="4" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="75dip" android:layout_height="25dip" android:layout_columnSpan="3" android:layout_rowSpan="1" android:background="#a500ab" android:gravity="center" android:text="5" android:textColor="@android:color/white" android:textSize="20dip" /> <TextView android:layout_width="50dip" android:layout_height="25dip" android:layout_columnSpan="2" android:layout_rowSpan="1" android:background="#00a9ab" android:gravity="center" android:text="6" android:textColor="@android:color/white" android:textSize="20dip" /> </GridLayout> </RelativeLayout>