Understanding measureWithLargestChild: Why breaks the layout?
Asked Answered
C

2

11

I'm playing with the option measureWithLargestChild="true". I don't understand why my layout breaks total, if one of my buttons has a too big text onto it. I think it should keep the basic size of 1/3 but they gets smaller about 1/6. Why is that?

Here can you see some screenshots:

Button layout bug

Here is my 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>
Curtin answered 3/5, 2013 at 10:3 Comment(0)
B
7

I believe this is a bug in measure algorithm. There is following comment in LinearLayout.measureHorizontal(int, int) method.

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

It says, the algorithm will shrink items with weight if there is not enough space for them. As measureWithLargestChild is set to true, all items have the same width as the most left item. Now they all together don't fit into the parent's width anymore. Thus they will be shrank. If there were no bug, all items would have same width afterwards. But due to the bug, algorithm shrinks original (wrap_content) widths instead of widths calculated according to measureWithLargestChild attribute. That's why two items on the right became smaller.

Butacaine answered 18/8, 2013 at 23:21 Comment(1)
Can someone please explain why it is shrunk in case 2( out of 4 cases ). How come there is no space available in this case?Doriadorian
B
0

For example, if you have a horizontal LinearLayout with android:measureWithLargestChild="true" and android:layout_width="wrap_content" Make sure the child view has set both android:layout_width="0dp" and android:layout_weight="1". Otherwise the width of child is not what you expect.

Boykins answered 12/6, 2020 at 3:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.