星期二, 2月 02, 2010

Flex 組件的大小與各個屬性的差異

組件的大小(size)就是指組件的高度和寬度。查看Flex幫助,可以看出關於Flex組件大小的屬性有很多,以寬度為例,有以下有關寬度的屬性:

* width
* maxWidth
* minWidth
* explicitWidth
* explicitMaxWidth
* explicitMinWidth
* measuredWidth
* measuredMinWidth
* percentWidth
* scaleX
* 以及組件的MXML標記中的width屬性。


如此之多的有關寬度的屬性難免讓人糊塗,而且,幫助上說的也不是很透徹,因此通過查閱相關文檔和源代碼,基本搞清了這些屬性的含義和相互作用。這些有關寬度的屬性中,基本的屬性包括:

* width
* explicitWidth
* measuredWidth
* percentWidth
* scaleX

明白這些屬性之後,自然容易理解剩餘的屬性。

* width,組件的當前實際寬度,以像素為單位。為什麼會有當前實際寬度的這樣的說法呢?因為在Flex中,能夠為組件設置相對寬度,即百分比的表示寬度,這時組件當前的實際寬度是根據父容器的寬度動態決定的,開發者無法知道實際寬度的,因此通過讀取width屬性可以知道其當前實際寬度。

* measuredWidth是組件的缺省寬度,以像素為單位。可以通過重載組件的measure方法來改變它的值,一般情況下,組件的measuredWidth都是0。

* explicitWidth 是顯式指定的寬度,以像素為單位。所謂顯式指定寬度區別於動態的相對寬度,即區別於百分比寬度percentWidth。開發者設置該屬性值時就已經知道到組件在運行時的寬度,故稱為顯式指定的寬度。該屬性同百分比寬度互斥,一旦設置了explicitWidth,則percentWidth的值就會變為 NaN,同理,一旦設置了percentWidth,explicitWidth值就會變為NaN。當用ActionsSript代碼設置了組件的 width屬性值時,explicitWidth屬性會立即被賦予同樣的值,同時percentWidth會變為NaN。設置explicitWidth 屬性時,percentWidth會立即被設置為NaN,但是width屬性則不會立即改變,要延遲組件佈局的commit階段才會變為與 explicitWidth相同的值。

* percentWidth是指組件的百分比寬度,比如設置組件佔用父容器的50%的寬度,那麼就設置該屬性值為50。該屬性同顯式指定的寬度(explicitWidth)互斥,一旦設置該屬性值,則explicitWidth屬性立即變為NaN。

* scaleX是當前組件寬度的縮放比例。一旦設置屬性,考慮到性能,不會立即更新組件的width和explicitWidth屬性,延遲到explicitWidth時會將width和explicitWidth屬性值改變。


除了以上基本屬性之外,值得注意的就是組件MXML標記中的width屬性。這個屬性在編譯組件MXML標記時,根據標記的該屬性值的格式編譯成設置 percentWidth或width屬性的AS代碼。如果組件MXML標記的width屬性後面有百分號(%),則其被編譯為設置 percentWidth屬性的AS代碼,如果組件MXML標記的width後面不帶百分號(%),則其被編譯為設置width屬性的AS代碼。


引用
ltian - Flex佈局之關於組件的大小

沒有留言:

張貼留言