2011-01-01 22 views
11

Tengo un TableLayout con un botón en la parte inferior. Mi problema es que el botón se extiende para ocupar todo el ancho de la columna, aunque no lo quiero tanto.Ancho del botón en Android TableLayout

alt text

El XML tiene el siguiente aspecto:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:stretchColumns="*" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <TableRow android:layout_height="wrap_content" 
     android:layout_width="fill_parent"> 
    <CheckBox android:id="@+id/check1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Some text 1"/> 
    <CheckBox android:id="@+id/check2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Some text 1"/> 
    </TableRow> 
    <TableRow android:layout_height="wrap_content" 
     android:layout_width="fill_parent"> 
    <CheckBox android:id="@+id/check3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Even some more text 2"/> 
    <CheckBox android:id="@+id/check4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Even some more text 2"/> 
    </TableRow> 
    <TableRow android:layout_height="wrap_content" 
     android:layout_width="fill_parent"> 
    <CheckBox android:id="@+id/check5" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="An even longer line of text 3"/> 
    <CheckBox android:id="@+id/check6" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Another longer line of text 3"/> 
    </TableRow> 

    <EditText 
     android:id="@+id/myEditText1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:inputType="textMultiLine" 
     android:singleLine="false" 
     android:text="Enter some text" 
    /> 

    <TableRow> 
    <Button android:id="@+id/SaveButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Save"> 
    </Button> 
    </TableRow>  

</TableLayout> 

Incluso si fijo una anchura explícita al botón lo ignora. Por ejemplo si tengo:

<Button android:id="@+id/SaveButton" 
     android:layout_width="100sp" 
     android:layout_height="100sp" 
     android:text="Save"> 
    </Button> 

... el botón se hace más alto pero el ancho aún se estira para llenar la columna.

Me gustaría que el botón tenga aproximadamente la mitad de su ancho actual, centrado en la columna. Gracias de antemano!

Respuesta

20

@mbaird tiene razón: android:stretchColumns="*" siempre va a estirar el ancho de la columna. Sin embargo, aún puede obtener el comportamiento que desea dentro de la columna colocando un FrameLayout en la columna que se extiende por el ancho de la columna, y luego coloque el botón allí. A continuación, puede hacer que el tamaño del botón como usted quiera y centrarlo en el FrameLayout:

<TableRow> 
    <FrameLayout 
     android:layout_height="wrap_content"> 
     <Button 
      android:id="@+id/SaveButton" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:paddingLeft="40dp" 
      android:paddingRight="40dp" 
      android:text="Save"> 
     </Button> 
    </FrameLayout> 
</TableRow> 
3

Estoy bastante seguro de que android:stretchColumns="*" siempre hará que el botón se estire de esa manera. ¿Has considerado colocar el botón fuera de TableLayout?

De la documentación: Los elementos secundarios de TableLayout no pueden especificar el atributo layout_width. El ancho siempre es MATCH_PARENT. Sin embargo, el atributo layout_height puede ser definido por un niño; el valor predeterminado es WRAP_CONTENT

+0

El problema de esta solución es que es difícil centrar el botón dentro de la columna, si el botón se encuentra fuera de la columna . –

Cuestiones relacionadas