2009-12-24 67 views
6

我敢肯定,我失去了一些東西簡單...安卓:簡單的LinearLayout和FILL_PARENT問題

背景:

我是新來的Android和UI設計,我只是想玩弄與佈局。現在我想在文本標籤上疊加一個複選框。我使用下面的XML佈局,工作正常

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

我的測試(只是爲了獲得對事物如何工作的感覺):

  • 方案1)當我設置CheckBoxlayout_height"fill_parent",CheckBox佔據整個屏幕並對齊中心(即 - TextView消失)。

  • 方案2)如果我代替設置TextViewlayout_height"fill_parent"CheckBox確實消失。實際上,沒有任何東西會消失,並且佈局看起來與上面的xml一樣,其中所有內容都被推到左上角。

問題(和註釋):

怎麼來的情景1的工作它的工作方式?

這種行爲似乎與我不一致。我認爲fill_parent只能讓元素填充父級中可用的任何空間。所以對我來說,似乎TextView應該得到它需要的任何空間需要(因爲它是wrap_content),但CheckBox應該佔用剩餘的空間(所以TextView將被強制到屏幕的底部,但不可見)。換句話說......場景2對我來說很有意義,但場景1沒有。

請解釋:-)。

感謝,

湯姆

+0

你可能想讀這個(如果不是已經):如何android繪製視圖?鏈接:http://developer.android.com/guide/topics/ui/how-android-draws.html – Samuh 2009-12-24 15:15:32

回答

13

LinearLayout措施,其子女爲一個單一的步驟一個接一個,讓你的第一個例子 它看到第一個孩子希望擁有所有可用的高度它給它吧。 在你的第二個例子中,它給了第二個孩子所有可用的地方。 如果你想複選框採取所有的地方,除了需要對文本框的地方,你應該改變 layout_height複選框來wrap_parent並設定每個孩子的layout_weight性質,佈局權重表示所有的孩子都多少可用的地方後測量應添加到他們每個人。通過以下步驟更具體地說明它的工作方式:
1)LinearLayout的父節點告訴線性佈局有多大可能
2)LinearLayout詢問它們的所有子節點,以便它們指定它們的佈局參數並分配可用空間。
3)如果任何自由空間仍然可用它根據自己的體重的(佈局體重兒之間的分佈是0和1之間,0 - 默認)
希望它可以幫助
編輯:
我已經檢查LinearLayout源代碼,發現如果一個線性佈局有一個FILL_PARENT佈局參數而不是零重量測量代碼將佈局高度設置爲WRAP_CONTENT並且後來根據權重分配所有孩子之間的空間。

+0

嗯,這似乎不完全正確,但你似乎很接近。當我將複選框的權重設置爲1時...但將其保留爲fill_parent作爲高度......它按預期工作。含義...一旦渲染器看到高度爲fill_parent,渲染器就不會將複選框全部留空。因此,所有關於權重的說法對我來說都是有意義的......但是我沒有看到「fill_parent」何時/何處適合這種佈局算法。你做? – Tom 2009-12-24 15:35:22

+0

看到我的編輯更多信息。這就是爲什麼我喜歡它總是有機會學到一些東西:) – 2009-12-24 16:14:15

+0

如果我可以給你一個以上的投票,我會的。這促使我堅果試圖弄清楚如何讓視圖充滿所有可用的空間,並有更多的空間進入另一個空間。我正在使用相對佈局的大雜燴,並沒有走得太遠。 – I82Much 2010-09-28 14:01:49