Если левый и правый вид в таблице будут иметь одинаковый размер, то центрированная таблица может иметь два столбца с интервалом 50%.

задачивает меня с первых же шагов с Android. Я не могу сделать оба столбца в TableLayout с двумя столбцами точно 50% каждый.

Вот пример:

<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent" >

    <TableLayout
        android:id="@+id/tablelayout"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:paddingRight="2dip" >

        <TableRow>
            <TextView
                style="@style/TextViewStandard"
                android_layout_span="2"
                android:layout_weight="1" 
                android:text="Bla" />
        </TableRow>

        <TableRow>
            <TextView
                style="@style/TextViewStandard"
                android:layout_weight="1"
                android:text="Name:" />

            <EditText
                style="@style/EditTextStandard"
                android:id="@+id/et_name"
                android:layout_weight="1" />
        </TableRow>

        <TableRow>
            <TextView
                style="@style/TextViewStandard"
                android:layout_weight="1"
                android:text="URL:" />

            <EditText
                style="@style/EditTextStandard"
                android:id="@+id/et_url"
                android:layout_weight="1" />
        </TableRow>

        <TableRow>
            <Button
                style="@style/ButtonStandard"
                android:layout_column="0"
                android:layout_marginTop="6dip"
                android:onClick="onClickOk"
                android:text="@android:string/ok" />
        </TableRow>
    </TableLayout>
</ScrollView>

И вот соответствующее определение стиля:

<resources>
    <style name="ButtonStandard" parent="@android:style/Widget.Button">
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_width">fill_parent</item>
    </style>

    <style name="EditTextStandard" parent="@android:style/Widget.EditText">
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_marginLeft">2dip</item>
        <item name="android:layout_marginRight">2dip</item>
        <item name="android:layout_marginTop">2dip</item>
        <item name="android:layout_width">fill_parent</item>
    </style>

    <style name="TextViewStandard" parent="@android:style/Widget.TextView">
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_marginLeft">2dip</item>
        <item name="android:layout_marginRight">2dip</item>
        <item name="android:layout_marginTop">2dip</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:textColor">@android:color/white</item>
    </style>
</resources>

Это становится действительно запутанным с вовлеченным CheckBox.

Что не так с моим определением?

Спасибо заранее. HJW

Ответы на вопрос(4)

но охватить все столбцы android: layout_span = "2" в других дочерних таблицах TableRow, которые не содержат атрибут android: layout_column. Надеюсь это поможет.

<TableLayout 
  android:id="@+id/tableLayout1"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:stretchColumns="0,1">

    <TableRow
      android:id="@+id/tableRow1"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">

        <TextView
          android:id="@+id/textView1"
          android:layout_column="0">
        </TextView>

        <TextView
          android:id="@+id/textView2"
          android:layout_column="1">
        </TextView>

    </TableRow>

</TableLayout> 

который в любой строке. Здесь нет явных элементов управления столбцами. Вид сетки имеет больший контроль над размером столбца, например: android: columnWidth = "100dp"

Если левый и правый вид в таблице будут иметь одинаковый размер, то центрированная таблица может иметь два столбца с интервалом 50%.

Решение Вопроса

android:layout_width приписывать0dp (и, конечно, держатьandroid:layout_weight как1) на ребенка взгляды?

Я был в подобных сценариях, когда я также хотел равномерно распределить данное пространство между двумя дочерними представлениями, но не смог этого сделать, так как дочерний элемент с «более широким содержимым» также стал шире, в пределах своего родителя, чем его родной брат. Это было связано с тем, что более широкий ребенок имел большую начальную ширину. Убедиться, что оба ребенка начали с одинаковой ширины (android:layout_width="0dp" на обоих) также гарантированно равномерно распределить пространство между ними.

 CommonsWare18 янв. 2011 г., 15:40
Что еще более важно, если вы сделаете это, дампTableLayout и переключиться наLinearLayout. TableLayout Предназначено для случаев, когда вам нужен Android для вычисления ширины столбца на основе содержимого ячейки. Если вы намеренно игнорируете это, вы также можете использовать вложенныеLinearLayouts вместо.
 Harald Wilhelm18 янв. 2011 г., 17:46
@ChristianB: Спасибо за объяснение. Я всегда думал, что должно быть что-то «не так» с TableLayout. Интересно, что многие неудачные TableLayouts прекрасно работают с эмулятором 2.3. @dbm: если для layout_width установлено значение 0dp, все дочерние представления (TextView / EditText) исчезли. Спасибо, в любом случае. Я проверю решение CommonsWares и полностью исключу TableLayouts. Не знаю, для чего они хороши, если вам нужно знать, что может быть напечатано на них и может испортить их ...
 Harald Wilhelm18 янв. 2011 г., 18:04
@CommonsWare: Не могу поверить, почему я взял TableLayouts? Изменение их на LinearLayout работало отлично. Большое спасибо.

удерживая ваш контроль. В этом примере у меня есть два столбца макета, и я поместил два ImageView по центру в каждом столбце.

    <TableLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stretchColumns="1">

        <TableRow>
            <FrameLayout 
                android:layout_height="wrap_content"
                android:layout_width="0dp"
                android:layout_weight="1">

                <ImageView android:layout_width="wrap_content" 
                    android:layout_height="wrap_content" 
                    android:src="@drawable/button_wedding_day_cheat_sheet" 
                    android:id="@+id/buttonWeddingDayCheatSheet"
                    android:onClick="onClickWeddingDayCheatSheet"
                    android:layout_gravity="center_horizontal">
                </ImageView>
            </FrameLayout>

            <FrameLayout 
                android:layout_height="wrap_content"
                android:layout_width="0dp"
                android:layout_weight="1">
                <ImageView android:layout_width="wrap_content" 
                    android:layout_height="wrap_content" 
                    android:src="@drawable/button_share_favorite_recipe" 
                    android:id="@+id/buttonShareFavoriteRecipe"
                    android:onClick="onClickShareFavoriteRecipe"
                    android:layout_gravity="center_horizontal">
                </ImageView>
                </FrameLayout>
            </TableRow>

    </TableLayout>
 krisDrOid28 июн. 2012 г., 12:47
Спасибо, приятель!!!! Это мне очень помогло...
 Steven09 нояб. 2013 г., 02:38
Это сработало для меня. Я должен был добавить center_vertical к элементам FrameLayout.

Ваш ответ на вопрос