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); } } 
  • Android Studio: Utilizar ImageButton para iniciar una nueva actividad bloquea la aplicación
  • Definiendo el orden Z de vistas de RelativeLayout en Android
  • Número máximo de selecciones MultiSelectListPreference Android
  • Alineación de un TextView y ImageView dentro de un LinearLayout
  • ¿Por qué el título no está centrado en la barra de herramientas?
  • El método más simple para convertir Json a Xml
  • Cómo poner un botón entre dos diseños
  • Usar el nombre del paquete en XML
  • onclicklistener en el elemento específico de la recyclerview en android
  • Comentar en el archivo de diseño de Android
  • ¿Cómo pasar una ruta de acceso de archivo que está en la carpeta assets a File (String path)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.