2012-01-05 95 views
1

我已經創建了一個派生自LinearLayout的自定義佈局管理器。 (我真的不使用太多的LinearLayout功能,但我不想去關心所有的很多ViewGroup中抽象方法。)我已經覆蓋僅Android自定義佈局管理器 - 兒童佈局

protected void onLayout(boolean changed, int l, int t, int r, int b) 

方法,我稱之爲child.layout(...)在MyLayout.onLayout(...)爲其每個孩子。所有其他的東西都是原始的LinearLayout。如果孩子是沒有孩子的簡單控制(MyLayout的孫子),它將工作正常,並且孩子將被正確地放置在他們的父母MyLayout中。

當我使用一些ViewGroup(LinearLayout,ViewSwitcher,...)和兒童作爲MyLayout的子時出現問題。在這種情況下,MyLayout中的子節點放置得很好,但是MyLayout中的孫子節點卻不在。看起來參數和值像wrap_content,fill_parent,layoutWeight沒有正確處理。例如,MyLayout中的ViewSwitcher不顯示其內容,具有fill_parent的LinearLayouts(MyLayout的子級)子項(MyLayout的子孫)的大小爲0px,CompoundButton(MyLayout的子項)有時不顯示其文本...

它在MyLayout.onLayout中似乎child.layout(...)正確設置每個孩子的大小和位置,但我需要調用其他一些方法來使每個孩子的佈局運行良好(如果孩子是帶孩子的ViewGroup)。有沒有像這樣或MyLayout只是改變onLayout應該工作好?

感謝您的所有建議。

回答

3

聽起來像你需要overMeasure和每個孩子呼叫measure()。如果你的孩子是viewgroups和孫子是視圖,那麼你想循環通過孩子,並調用measure(int,int)。那麼孩子們應該給孫子們打電話。

看看在的LinearLayout來源: http://www.grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.6_r1/android/widget/LinearLayout.java#LinearLayout.onMeasure%28int%2Cint%29

+0

你也chould能夠測量 – siliconeagle 2012-01-05 16:32:42

+0

非常感謝後使用getMeasuredWidth()getMeasuredHeight()!你是對的! – 2012-01-05 16:33:24

+0

關心獎勵積分?這是正確的做...;) – siliconeagle 2012-01-06 15:57:43