2013-05-03 32 views
10

Tôi đang chơi với tùy chọn measureWithLargestChild="true". Tôi không hiểu tại sao bố cục của tôi bị hỏng tổng cộng, nếu một trong các nút của tôi có văn bản quá lớn trên đó. Tôi nghĩ rằng nó nên giữ kích thước cơ bản là 1/3 nhưng chúng nhỏ hơn khoảng 1/6. Tại sao vậy?Hiểu measureWithLargestChild: Tại sao ngắt bố cục?

đây bạn có thể thấy một số ảnh chụp màn hình:

Button layout bug

Đây là xml của tôi:

<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> 

Trả lời

6

Tôi tin rằng đây là một lỗi trong thuật toán đo lường. Có nhận xét sau trong phương thức LinearLayout.measureHorizontal(int, int).

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

Thuật toán sẽ thu nhỏ các mục với weight nếu không có đủ dung lượng cho chúng. Vì measureWithLargestChild được đặt thành true, tất cả các mục đều có cùng chiều rộng với mặt hàng trái nhiều nhất. Bây giờ tất cả họ cùng nhau không phù hợp với chiều rộng của cha mẹ nữa. Vì vậy, họ sẽ bị thu hẹp. Nếu không có lỗi, tất cả các mục sẽ có cùng chiều rộng sau đó. Nhưng do lỗi, thuật toán co lại các chiều rộng ban đầu (wrap_content) thay vì độ rộng được tính theo thuộc tính measureWithLargestChild. Đó là lý do tại sao hai món đồ bên phải trở nên nhỏ hơn.

+0

Ai đó có thể vui lòng giải thích lý do tại sao nó bị thu hẹp trong trường hợp 2 (trong số 4 trường hợp). Làm thế nào đến không có không gian có sẵn trong trường hợp này? – Diffy

Các vấn đề liên quan