Веса для TableLayout и LinearLayout не совпадают

Почему веса TableLayout и LinearLayout не означают одно и то же? Или у меня ошибка в макете XML?

4-кнопочный тест

Я подготовил простой тест с 4 кнопками с весами 1,1,1,3. Результат отличается при использовании TableLayout (один столбец) и LinearLayout (вертикальный).

По следующей ссылке вы можете увидеть скриншот реализации TableLayout (слева) и LinearLayout (справа). http://i.stack.imgur.com/9dYlB.png

На мой взгляд, LinearLayout правильный - сумма равна 6, поэтому четвертая кнопка с весом 3 должна занимать половину места.

XML макета таблицы

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TableRow
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >
        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="A" />
    </TableRow>
    <TableRow
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >
        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="B" />
    </TableRow>
    <TableRow
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >
        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="C" />
    </TableRow>
    <TableRow
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3" >
        <Button
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="D" />
    </TableRow>
</TableLayout>

XML LinearLayout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="A" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="B" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:text="C" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3"
        android:text="D" />
</LinearLayout>

Окружающая среда

ADT: 22.6.2
AVD: Intel Atom с 4.2.2 и 4.4.2 (оба результата одинаковые)


person bocekm    schedule 06.04.2014    source источник


Ответы (1)


Кажется, что если вы измените значение веса последней кнопки на 7, вы получите тот же результат, что и во втором файле xml. Я думаю, это потому, что он учитывает дополнительные значения веса, которые вы поместили в файл, приписывая вес как строкам таблицы, так и кнопкам. Вот что я использовал:

Редактировать: чтобы быть более ясным, у вас есть весовая сумма (всего) 14 с этой отредактированной версией, последняя кнопка имеет 7, что составляет половину от общего числа. В вашем макете только для кнопок у вас другая весовая сумма.

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TableRow
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="A" />
</TableRow>
<TableRow
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="B" />
</TableRow>
<TableRow
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" >
    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="C" />
</TableRow>
<TableRow
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="7" >
    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text="D" />
</TableRow>

person Drakora    schedule 06.04.2014
comment
Ты прав. Все веса суммируются, TableRow и Button. В любом случае веса кнопок были избыточными, как я проверял. Спасибо. - person bocekm; 07.04.2014