TableLayout和LinearLayout的权重不一样

时间:2014-04-06 19:00:57

标签: android android-layout android-linearlayout android-tablelayout

为什么TableLayout和LinearLayout权重不相同?或者我在布局XML中有错误吗?

4按钮测试

我准备了一个简单的测试,其中4个按钮的重量为1,1,1,3。使用TableLayout(一列)和LinearLayout(垂直)的结果不一样。

在以下链接中,您可以看到TableLayout(左)和LinearLayout(右)实现的屏幕截图。 http://i.stack.imgur.com/9dYlB.png

在我看来,LinearLayout是正确的 - 总和是6,所以第四个按重量为3的按钮应占用一半的空间。

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

LinearLayout XML

<?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(两者结果相同)

1 个答案:

答案 0 :(得分:0)

似乎如果您将最终按钮的重量值更改为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>