Diseño de tabla XML? ¿Dos filas de la misma anchura con botones de igual anchura?

Aquí hay una parte de mi XML para el formato LAND:

<TableLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center" android:stretchColumns="*"> <TableRow> <Button android:id="@+id/countbutton" android:text="@string/plus1"/> <Button android:id="@+id/resetbutton" android:text="@string/reset" /> </TableRow> </TableLayout> 

Y ahora lo que no consigo – la anchura de una fila y también del botón depende del TEXTO dentro del botón. Si los dos textos son equaly largos permite decir: TEXTO su ok – la mitad de la mesa está en el centro de la pantalla. Pero si tienen un tamaño diferente, digamos "A" y "ESTE ES EL BOTÓN LARGO", el CENTRO de la tabla no está en el centro de la pantalla y los botones no son igualmente anchos …

Para tener botones en filas donde los botones son del mismo tamaño que necesita hacer.

  <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="0dip"/> <Button android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="0dip"/> </LinearLayout> 

Y rellene las otras propiedades xml para sus botones.

La magia está en las propiedades de layout_weight y width. No necesita el diseño de la tabla. Estas propiedades le indican al diseño que sus vistas deben ocupar un espacio igual en el diseño padre.

Un buen ejemplo (originalmente de http://androidadvice.blogspot.com/2010/10/tablelayout-columns-equal-width.html )

Probado y funcionando:

 <TableRow> <!-- Column 1 --> <TextView android:id="@+id/tbl_txt1" android:layout_width="0dip" android:layout_height="wrap_content" android:background="@color/red" android:textColor="@color/white" android:padding="10dip" android:layout_margin="4dip" android:layout_weight="1" android:text="Column 1" /> <!-- Column 2 --> <TextView android:id="@+id/tbl_txt2" android:layout_width="0dip" android:layout_height="wrap_content" android:background="@color/red" android:textColor="@color/white" android:padding="10dip" android:layout_margin="4dip" android:layout_weight="1" android:text="Column 2" /> <!-- Column 3 --> <TextView android:id="@+id/tbl_txt3" android:layout_width="0dip" android:layout_height="wrap_content" android:background="@color/red" android:textColor="@color/white" android:padding="10dip" android:layout_margin="4dip" android:layout_weight="1" android:text="Column 3" /> </TableRow> 

Además de la respuesta aceptada:

Tuve un problema similar donde necesitaba varias imágenes en una cuadrícula con anchos de columna iguales, por lo que usé un diseño de tabla. Funcionó, pero como las imágenes cargadas asincrónicamente, las columnas correspondientes ocuparían el ancho completo hasta que todas las columnas tuvieran al menos una imagen en ellas.

Resolví esto usando la solución de Robby Pond, pero no funcionó para la última fila, que no necesariamente tenía tantas imágenes como las otras filas, estirando esas imágenes para ocupar todo el espacio disponible cuando quería que encajaran en el Mismas columnas que las anteriores. Para combatir esto, llené las columnas vacías restantes de esa fila con objetos regulares de la visión,

Utilizando los mismos parámetros de diseño que todas las demás imágenes:

width = 0, weight = 1. Y eso lo resolvió!

El fragmento de diseño

 <TableLayout android:id="@+id/tablelayout" android:layout_width="match_parent" android:layout_height="match_parent" /> 

El código que programaticamente establece propiedades de diseño de botones en la tabla:

 public void addButtons(View view) { TableLayout tableLayout = (TableLayout) findViewById(R.id.tablelayout); Context context = getApplicationContext(); tableLayout.removeAllViews(); for (int rowIndex = 0; rowIndex < ROWS; rowIndex++) { TableRow row = new TableRow(context); for (int columnIndex = 0; columnIndex < COLUMNS; columnIndex++) { Button btn = new Button(context); LayoutParams buttonParams = new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f); btn.setLayoutParams(buttonParams); row.addView(btn); } tableLayout.addView(row); } } 
  • Cambiar del diseño main.xml a otro diseño
  • ¿Cómo funciona el atributo androide Xml android: onClick = "..." trabajo detrás de las escenas?
  • Actividad de Android - DataBinding con preferencias
  • Cómo modificar el valor de nodo xml?
  • XML de Android: se desplaza entre campos EditText
  • ¿Cómo puedo añadir una línea blanca 1px horizontal debajo del botón en un diseño relativo?
  • PreferenceScreen - <intention ... /> - Excepción - FLAG_ACTIVITY_NEW_TASK
  • ¿Por qué hay content_main.xml y activity_main.xml de forma predeterminada en lugar de sólo activity_main.xml?
  • Disposición de la pantalla de preferencias de Android
  • Flechas personalizadas sin imagen: Android
  • ¿Cómo puedo hacer que mi botón se parezca más al botón de acción flotante de Android JellyBean (v21)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.