measureWithLargestChild

measureWithLargestChild

我正在使用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>

最佳答案

我相信这是度量算法中的错误。 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,因此所有项目的宽度与最左边的项目相同。现在他们都不再适合 parent 的宽度了。这样他们就会缩水。如果没有错误,则之后所有项目的宽度均相同。但是由于该错误,算法会缩小原始(wrap_content)宽度,而不是根据measureWithLargestChild属性计算的宽度。这就是为什么右边的两个项目变小的原因。

10-02 09:04