usar studio how gridlayout como columns codigo 3x3 android layout android-gridlayout

studio - gridlayout layoutparams android



Android GridLayout igual ancho de columna (2)

¿Realmente no es posible forzar fácilmente anchos de columna iguales en un GridLayout de Android? Tratando el diseño obvio ...

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:columnCount="4" android:rowCount="8" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_gravity="center" android:text="Button 1" /> <Button android:id="@+id/button2" android:layout_gravity="center" android:text="Button 2" /> <Button android:id="@+id/button3" android:layout_gravity="center" android:text="Button 3" /> <Button android:id="@+id/button4" android:layout_gravity="center" android:text="Button 4" /> </GridLayout>

... deja el botón más a la derecha centrado en una columna que es claramente más ancha que las otras tres. (Juega con el texto del botón y fácilmente puedes obtener peores ejemplos).

Leí la documentación de Android con respecto a la distribución de espacio en exceso en GridLayouts, pero parece tan obvio que incluso los anchos de las columnas a menudo (en algunos casos, incluso) se buscan en una situación como esta que tengo que creer que me falta algo obvio / fácil.


Solo usa el peso de la columna para los niños de GridLayout:

android:layout_width="0dp" android:layout_columnWeight="1"

Recuerde usar la biblioteca de soporte si su proyecto es MinSdk <API 21:

implementation ''com.android.support:appcompat-v7:27.1.1'' implementation ''com.android.support:gridlayout-v7:27.1.1''

Debe usar android.support.v7.widget.GridLayout en lugar de GridLayout. Y no olvide usar el espacio de nombres de la aplicación cuando use la biblioteca de soporte:

xmlns:app="http://schemas.android.com/apk/res-auto" app:layout_width="0dp" app:layout_columnWeight="1"

UPD:

Si realiza su GridLayout programáticamente, use GridLayout.Spec. Por ejemplo:

GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams( GridLayout.spec( GridLayout.UNDEFINED, 1f), GridLayout.spec( GridLayout.UNDEFINED, 1f)); layoutParams.width = 0; yourChildView.setLayoutParams(layoutParams); yourGridLayout.addView(yourChildView);

(para cada vista del niño)


Utilice un diseño de tabla en su lugar y especifique columnas de estiramiento

<TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/textViewLeaveRemainingDescription" android:stretchColumns="0,1"> <TableRow> <Button android:id="@+id/button1" android:layout_gravity="center" android:text="Button 1" /> <Button android:id="@+id/button3" android:layout_gravity="center" android:text="Button 3" /> </TableRow> <TableRow> <Button android:id="@+id/button2" android:layout_gravity="center" android:text="Button 2" /> <Button android:id="@+id/button4" android:layout_gravity="center" android:text="Button 4" /> </TableRow> </TableLayout>