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>