2013-05-03 2 views
10

Я играю с опцией measureWithLargestChild="true". Я не понимаю, почему мой макет разбивает общее количество, если одна из моих кнопок имеет слишком большой текст. Я думаю, что он должен поддерживать базовый размер 1/3, но он становится меньше около 1/6. Почему это?Понимание мерыWithLargestChild: Почему ломается макет?

Здесь вы можете увидеть несколько скриншотов:

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

Смежные вопросы