2013-05-03 133 views
10

我正在玩选项measureWithLargestChild="true"。如果我的某个按钮的文字太大,我不明白为什么我的布局会完全打破。我认为它应该保持1/3的基本尺寸,但是它们会变小约1/6。这是为什么?了解measureWithLargestChild:为什么打破布局?

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

Button layout bug

这里是我的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> 

回答

6

我相信这是测量算法的错误。在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属性计算的宽度。这就是为什么右侧的两个项目变小了。

+0

有人能解释为什么它收缩在情况2(4例中)。这种情况下怎么没有空间? – Diffy 2014-07-25 11:47:53