我注意到Android,WPF和Silverlight都遵循兩遍佈局模式。有一個遞歸的Measure()方法被調用來調整元素的大小,可能多次。然後調用一個遞歸的Layout/Arrange()方法,該方法將子控件的確切位置設置在其父控件中,並且還會設置控件的最終大小。雙通道UI佈局:爲什麼?
我的問題:爲什麼會分成兩個階段,特別是對於某些類型的控件,Measure()無法計算控件的實際大小而沒有實際佈置子項的位置?是否有某種類型的佈局少數案例可以通過這種方式實現?我試圖創建我自己的UI工具包,而我目前正在傾向於一次通過Layout()模式,但我想確信這是否明智或不合適。
感謝您閱讀本:)
肖恩
這是最後一點,「最終通知每個元素的分配空間」,這是最重要的部分。小部件管理器不會讓控件大小自己,它只是讓他們提示。 – moswald 2010-09-07 13:51:10
嗯..我得到孩子們如何貪婪地分配他們的大小,然後由父母來解決適當的空間。但是,您可以通過執行每個子項的measure(),然後在父級的layout()調用下爲每個子項執行最終佈局(),以單遍算法實現此目的。這仍然是樹的單個遞歸,但是每個子集都有兩個通行證。我是否認爲這與雙通方法達到了相同的目的,但效率不高? – Sean 2010-09-07 20:39:24
從祖父母的角度來看,父母只是另一個想要衡量的孩子()和佈局()。 ;) – Bubblewrap 2010-09-08 06:28:01