Ширина кнопок в Android TableLayout

У меня есть TableLayout с кнопкой внизу. Моя проблема заключается в том, что кнопка растягивается, чтобы заполнить всю ширину столбца, хотя я не хочу, чтобы он был широким.

alt text

XML выглядит так:

<?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>

Даже если я устанавливаю явную ширину кнопки, она игнорирует ее. Например, если у меня есть:

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

... кнопка становится выше, но ширина все равно растягивается, чтобы заполнить столбец.

Я бы хотел, чтобы кнопка была примерно в два раза меньше ее текущей ширины, в центре которой находился столбец. Спасибо заранее!

Ответ 1

@mbaird прав: android:stretchColumns="*" всегда будет растягивать ширину столбца. Однако вы все равно можете получить нужное поведение внутри столбца, поставив FrameLayout в столбец, который растягивает ширину столбца, а затем помещает вашу кнопку внутри. Затем вы можете сделать размер кнопки, как вам нравится, и центрировать его в 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>

Ответ 2

Я уверен, что android:stretchColumns="*" будет всегда заставлять кнопку растягиваться так. Рассматривали ли вы размещение кнопки вне TableLayout?

Из документации: Дети TableLayout не могут указать атрибут layout_width. Ширина всегда MATCH_PARENT. Однако атрибут layout_height может быть определен дочерним элементом; значением по умолчанию является WRAP_CONTENT