11

我正在玩 option measureWithLargestChild="true"。如果我的一个按钮上的文本太大,我不明白为什么我的布局会完全中断。我认为它应该保持 1/3 的基本尺寸,但它们会变小约 1/6。这是为什么?

在这里你可以看到一些截图:

按钮布局错误

这是我的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:baselineAligned="false"
    android:gravity="center"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:measureWithLargestChild="true" >
        <Button
            style="@style/my_style"
            android:layout_weight="1"
            android:text="Button123456" />
        <Button
            style="@style/my_style"
            android:layout_weight="1"
            android:text="A" />
        <Button
            style="@style/my_style"
            android:layout_weight="1"
            android:text="WW" />
    </LinearLayout>
</LinearLayout>
4

2 回答 2

7

我相信这是测量算法中的一个错误。方法中有以下注释LinearLayout.measureHorizontal(int, int)

// Either expand children with weight to take up available space or
// shrink them if they extend beyond our current bounds

weight它说,如果没有足够的空间,算法将缩小项目。measureWithLargestChild设置为 时,true所有项目的宽度都与最左边的项目相同。现在它们一起不再适合父母的宽度。因此,它们将被缩小。如果没有错误,那么之后所有项目将具有相同的宽度。但是由于该错误,算法会缩小原始(wrap_content)宽度而不是根据measureWithLargestChild属性计算的宽度。这就是为什么右边的两个项目变小了。

于 2013-08-18T23:21:19.613 回答
0

例如,如果您有一个水平 LinearLayout 和android:measureWithLargestChild="true"android:layout_width="wrap_content" 请确保子视图同时设置了android:layout_width="0dp"android:layout_weight="1"。否则孩子的宽度不是你所期望的。

于 2020-06-12T03:22:09.850 回答