2009-12-24 28 views
6

tôi chắc chắn rằng tôi đang thiếu một cái gì đó đơn giản ...android: LinearLayout đơn giản và fill_parent câu hỏi

Bối cảnh:

Tôi mới để thiết kế Android và giao diện người dùng, và tôi chỉ muốn chơi xung quanh với bố cục. Ngay bây giờ tôi muốn ngăn xếp một hộp kiểm trên đầu nhãn văn bản. Tôi đang sử dụng cách bố trí xml sau đó hoạt động tốt:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <CheckBox android:id="@+id/check_box" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/check_box_text" /> 

    <TextView android:id="@+id/dummy_display" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/dummy_label" /> 

</LinearLayout> 

Các xét nghiệm của tôi (chỉ để có được một cảm giác về cách điều hoạt động):

  • Kịch bản 1) Khi tôi đặt CheckBox 's layout_height to "fill_parent", CheckBox chiếm toàn bộ màn hình và căn giữa (tức là - TextView biến mất).

  • Kịch bản 2) Nếu tôi thay thiết lập 's layout_height để "fill_parent"TextView, các CheckBox không KHÔNG biến mất. Trên thực tế, không có gì biến mất và bố cục trông giống như xml ở trên, nơi mọi thứ được đẩy lên trên cùng bên trái.

Các Câu hỏi (và ý kiến):

Tại sao Kịch bản 1 hoạt động theo cách nó hoạt động?

Hành vi này có vẻ không phù hợp với tôi. Tôi nghĩ rằng fill_parent chỉ được cho phép để các yếu tố điền vào bất cứ không gian có sẵn trong phụ huynh. Vì vậy, với tôi, có vẻ như là TextView sẽ nhận được bất kỳ khoảng trống nào cần (vì nó là wrap_content), nhưng CheckBox sẽ chiếm phần còn lại của không gian (do đó TextView sẽ bị buộc phải ở dưới cùng của màn hình, nhưng không vô hình). Nói cách khác ... Kịch bản 2 có ý nghĩa với tôi, nhưng kịch bản 1 thì không.

Vui lòng giải thích :-).

Cảm ơn,

Tom

+0

Bạn có thể muốn đọc nội dung này (nếu chưa có): Cách android thu hút Chế độ xem? Liên kết: http://developer.android.com/guide/topics/ui/how-android-draws.html – Samuh

Trả lời

13

LinearLayout biện pháp đó trẻ em là một bước duy nhất từng người một, vì vậy trong ví dụ đầu tiên bạn nó thấy rằng đứa con đầu lòng muốn có tất cả chiều cao sẵn nó mang lại cho nó để nó. Trong ví dụ thứ hai của bạn, nó cung cấp tất cả các vị trí có sẵn cho đứa trẻ thứ hai. Nếu bạn muốn hộp kiểm có tất cả các vị trí ngoại trừ vị trí cần thiết cho hộp văn bản, bạn nên thay đổi layout_height của hộp kiểm thành wrap_parent và đặt layout_weight tài sản của mỗi đứa trẻ, trọng lượng bố cục cho biết có bao nhiêu địa điểm có sẵn sau thêm vào mỗi người trong số họ. Cụ thể hơn cách nó hoạt động theo các bước:
1) Cha mẹ của LinearLayout cho bố cục tuyến tính lớn như thế nào có thể là
2) LinearLayout yêu cầu tất cả trẻ em theo thứ tự chúng chỉ định về tham số bố cục của chúng và phân phối không gian có sẵn.
3) Nếu bất kỳ không gian trống vẫn còn có sẵn nó phân phối nó giữa trẻ em theo (trọng lượng bố trí cân của họ là giữa 0 và 1, 0 - theo mặc định)
Hy vọng nó giúp
Edit:
Tôi đã kiểm tra LinearLayout mã nguồn và tìm ra điều gì nếu bố cục tuyến tính có thông số bố cục FILL_PARENT và không phải là mã đo trọng số 0 sẽ đặt chiều cao bố cục thành WRAP_CONTENT và sau đó phân phối không gian giữa tất cả trẻ em theo trọng lượng.

+0

Hmmm, điều này dường như không hoàn toàn chính xác nhưng bạn có vẻ gần gũi. Khi tôi đặt trọng số của hộp kiểm thành 1 ... nhưng GIỮ nó như fill_parent cho chiều cao ... nó hoạt động như mong đợi. Có nghĩa là ... trình kết xuất không chỉ cung cấp hộp kiểm tất cả khoảng trắng khi nó thấy fill_parent cho chiều cao. Vì vậy, tất cả mọi thứ bạn nói về trọng lượng có ý nghĩa với tôi ... nhưng tôi không thấy khi nào/nơi "fill_parent" phù hợp với thuật toán bố cục này. Bạn có? – Tom

+0

xem chỉnh sửa của tôi để biết thêm thông tin. Đó là lý do tại sao tôi thích SO nó luôn luôn là một cơ hội để tìm hiểu một cái gì đó :) –

+0

Nếu tôi có thể cung cấp cho bạn nhiều hơn một phiếu bầu, tôi sẽ. Nó đã được lái xe cho tôi NUTS cố gắng tìm ra cách để có quan điểm điền vào tất cả các không gian có sẵn, với nhiều không gian đi đến cái khác. Tôi đã sử dụng một đống các bố cục tương đối và không nhận được rất xa. – I82Much

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