Diseño de tabla XML? ¿Dos filas de ancho EQUAL se rellenan con botones igualmente anchos?

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

  

Y ahora lo que no consigo, el ANCHO de una fila y también el botón depende del TEXTO dentro del botón. Si ambos textos son igual de largos, digamos: TEXTO está bien, la mitad de la tabla está en el medio de la pantalla. Pero si tienen un tamaño diferente, digamos “A” y “ESTE ES EL BOTÓN LARGO”, el CENTRO de la mesa ya no está en el centro de la pantalla, por lo que los botones no tienen el mismo ancho …

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

      

Y complete las otras propiedades xml para sus botones.

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

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

Probado y funcionando:

         

Además de la respuesta aceptada:

Tuve un problema similar cuando necesitaba varias imágenes en una cuadrícula con anchos de columna iguales, así que usé un diseño de tabla. Funcionó, pero como las imágenes se cargaban de forma asíncrona, las columnas correspondientes ocupaban todo el ancho hasta que todas las columnas tenían al menos una imagen en ellas.

Lo resolví 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 arriba. Para combatir esto, llené las columnas vacías restantes de esa fila con objetos de vista normales,

usando los mismos parámetros de diseño que todas las otras imágenes:

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

El fragmento de diseño

  

El código que establece programáticamente las propiedades de diseño de los 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); } }