2010-02-10 8 views
17

Botones para llenar la anchura cuando se utiliza TableLayout

Tengo una tabla que tiene 2 filas teniendo cada fila 3 botones. ¿Cómo puedo hacer que los botones llenen el espacio por igual? En HTML, les daría un 33% de ancho.

También conoces la forma en que puedo crear una vista con 4 botones de imagen en una fila como un diseño de cuadrícula, similar al iniciador.

Respuesta

32

Intente agregar android:stretchColumns="*" a su <TableLayout> etiqueta.

+0

Esto no funciona. Al menos con la última versión de Android. – Timmmm

+0

@Timmmm ¿Estás tan seguro de eso? Todavía está en la documentación: http://developer.android.com/reference/android/widget/TableLayout.html#attr_android:stretchColumns –

+0

Sí. Necesita establecer el peso y establecer el ancho en 0. Y * no * necesita establecer stretchColumns. ¡La documentación de Android no es garantía de nada! Ver mi ejemplo de trabajo a continuación. – Timmmm

3

Establezca el valor de layout_width de TableRow en fill_parent y establezca un layout_weight de 1 en cada botón.

El layout_weight funciona algo así como un porcentaje. Si todos sus artículos obtienen el mismo número, toman el mismo porcentaje de espacio. Si un botón tiene un peso de 2 y otro tiene un peso de 1, entonces el primero ocupará el doble de espacio.

Si aún no lo ha hecho, listo a través de la página common layouts de la guía de desarrollo para una buena introducción a los diseños.

+0

Esto tampoco funciona. Con todo teniendo layout_weight = 1, todavía tengo botones de tamaño desigual. – Timmmm

15

fin encontré la verdadera respuesta aquí: http://androidadvice.blogspot.com/2010/10/tablelayout-columns-equal-width.html

Hay un ejemplo más mínimo en stackoverflow también aquí: https://stackoverflow.com/a/2865558/265521

Ejemplo:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"> 
    <TableRow> 
     <Button 
      android:layout_width="0dip" 
      android:layout_height="match_parent" 
      android:text="Why is doing layouts on Android" 
      android:layout_weight="1" 
      /> 
     <Button 
      android:layout_width="0dip" 
      android:layout_height="match_parent" 
      android:text="so" 
      android:layout_weight="1" 
      /> 
    </TableRow> 
    <TableRow> 
     <Button 
      android:layout_width="0dip" 
      android:layout_height="match_parent" 
      android:text="damn" 
      android:layout_weight="1" 
      /> 
     <Button 
      android:layout_width="0dip" 
      android:layout_height="match_parent" 
      android:text="frustrating?" 
      android:layout_weight="1" 
      /> 
    </TableRow> 
</TableLayout> 
+0

Parece que esta solución no responde.3 columnas se verían en un dispositivo móvil moderno, pero podrían aplastar las cosas demasiado en una pantalla más pequeña y sería demasiado ancho en una tableta ... – IcedDante

+0

Mucho mejor que cualquier otra cosa que he encontrado. – SH7890

0

Así que en conclusión de los postes, el La forma correcta de hacerlo es establecer el NumberOfTheColumns:

<tablelayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:stretchColumns="NumberOfTheColumns"/> 

Puede establecer la cantidad de "piezas" horizontales que necesita. Si tiene una tabla de 3x3:

<TableLayout 
    android:minWidth="25px" 
    android:minHeight="25px" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/tableLayout1" 
    android:stretchColumns="3"> 
    <TableRow 
     android:id="@+id/tableRow1"> 
     <TextView 
      android:text="@string/EventTitle" 
      android:id="@+id/textView1" 
      android:gravity="center_vertical" 
      android:layout_column="0" /> 
     <EditText 
      android:inputType="text" 
      android:id="@+id/editText3" 
      android:layout_weight="2" 
      android:layout_span="2" 
      android:layout_column="1" /> 
    </TableRow> 
    <TableRow 
     android:id="@+id/tableRow2"> 
     <TextView 
      android:text="@string/EventDateStart" 
      android:id="@+id/textView1" 
      android:gravity="center_vertical" 
      android:layout_column="0" /> 
     <EditText 
      android:inputType="date" 
      android:id="@+id/editText1" 
      android:layout_weight="1" 
      android:layout_column="1" 
      android:layout_width="wrap_content" /> 
     <EditText 
      android:inputType="time" 
      android:id="@+id/editText2" 
      android:layout_weight="1" 
      android:layout_column="2" 
      android:layout_width="match_parent" /> 
    </TableRow> 
    <TableRow 
     android:id="@+id/tableRow3"> 
     <TextView 
      android:text="@string/EventDateEnd" 
      android:id="@+id/textView1" 
      android:gravity="center_vertical" 
      android:layout_column="0" 
      android:layout_width="match_parent" /> 
     <EditText 
      android:inputType="date" 
      android:id="@+id/editText1" 
      android:layout_weight="1" 
      android:layout_column="1" /> 
     <EditText 
      android:inputType="time" 
      android:id="@+id/editText2" 
      android:layout_weight="1" 
      android:layout_column="2" /> 
    </TableRow> 
    <TableRow> 
     <TextView 
      android:text="@string/Description" 
      android:id="@+id/textView1" 
      android:gravity="center_vertical" 
      android:layout_weight="3" 
      android:layout_span="3" 
      android:layout_column="0" 
      android:layout_width="match_parent" /> 
    </TableRow> 
    <TableRow> 
     <EditText 
      android:inputType="textMultiLine" 
      android:id="@+id/editText3" 
      android:layout_height="50dp" 
      android:layout_weight="3" 
      android:layout_span="3" 
      android:layout_column="0" 
      android:layout_width="match_parent" /> 
    </TableRow> 
</TableLayout> 

En esta muestra, puede ver una tabla de 5x3. Puede establecer el ancho de cada columna estableciendo cuántas piezas del ancho de la tabla completa necesita ...

Cuestiones relacionadas