TableLayout с 2 столбцами с 50% точно для каждого столбца - PullRequest
33 голосов
/ 18 января 2011

Это озадачивает меня с первых шагов с 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 ]

66 голосов
/ 18 января 2011

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

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

27 голосов
/ 17 апреля 2012

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

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

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

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

...