我正在玩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>
答案 0 :(得分: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
属性计算的宽度。这就是为什么右边的两个项目变小了。
答案 1 :(得分:0)
例如,如果您有一个带有android:measureWithLargestChild="true"
和android:layout_width="wrap_content"
的水平LinearLayout
确保子视图同时设置了android:layout_width="0dp"
和android:layout_weight="1"
。否则,孩子的宽度不是您期望的。