Подтвердить что ты не робот

2-столбце TableLayout с 50% точно для каждого столбца

Это меня озадачивает меня с первых шагов с Android. Я не могу сделать оба столбца в 2-столбце 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

4b9b3361

Ответ 1

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

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

Ответ 2

Так я равномерно отформатирую таблицы. Не часть вашего вопроса, но для охвата всех столбцов 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> 

Ответ 3

Я бы создал таблицу Внутри рамки, держащей ваш контроль. В этом примере у меня есть макет двух столбцов, и я поставил два 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>

Ответ 4

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

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