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 el fondo del botón alfa sin cambiar el valor del alfabeto del texto en Android?
  • La vista de desplazamiento de Android es demasiado larga
  • Actividad de configuración botón Arriba
  • XmlPullParser: obtener texto interno incluyendo etiquetas XML
  • La vista personalizada no aparece
  • Esquinas redondeadas redondeadas de Android XML con etiqueta de mapa de bits
  • Duplicar valor en el encabezado de NavigationView después de actualizar el texto del encabezado
  • Intellij IDEA formatea XML con atributos de alineación
  • El enfoque de EditText es inconsistente en todos los diseños
  • ¿Por qué tengo espacio en blanco en la parte superior y en la parte inferior de mi ImageView en mi RelativeLayout?
  • Android Studio AndroidManifest.xml vs build.gradle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.