flex的寬度屬性: * width * explicitWidth * measuredWidth * percentWidth * scaleX

原創   * width * explicitWidth * measuredWidth * percentWidth * scaleX 收藏

第一種情況是一般的flash.display.DisplayObject,包括flash.display.Shape、 flash.display.MovieClip、flash.display.Sprite等,其width和height代表該對象的外接矩形的實際 長寬像素數。等一下,這個定義還不嚴謹,嚴謹的說法應該是:如果這個DisplayObject的父容器、爺爺容器,一直到祖宗容器也就是到Stage, 全部都沒有縮放,那麼這個width和height就能代表該對象的外接矩形的實際長寬像素數。之所以要加上這個前提,是因爲《Flex 2、Flex 3和Flash 9中的縮放》提到過,父容器的縮放並不會改變子對象的屬性,而只會改變子對象在屏幕上的實際渲染尺寸。

雖然父容器的縮放 並不會改變子對象的屬性,但是DisplayObject對象自己的縮放屬性(scaleX和scaleY)卻會影響自己的width和height. 設置DisplayObject的scaleX和scaleY會改變其width和height,而且,設置width和height也會改變 scaleX和scaleY. 這就意味着,設置一般的DisplayObject的width和height就會導致該對象縮放。不過,如果這個DisplayObject原本的 width和height爲0,則無法改變它的width和height,比如一個空無一物的Sprite,不論如何設置,width和height始終 是0.

第二種情況是flash.display.TextField,它重寫了基類的set width和set height函數,所以改變TextField的width和height並不會令TextField縮放,而只是改變文本區域的大小。改變width和 height時,單個文字不會變大或變小,而可顯示的文字數量會變多或變少。

改變TextField的width和height不會改變TextField的scaleX和scaleY,但是改變TextField的scaleX和scaleY會改變TextField的width和height.

第三種情況是Flex的mx.core.UIComponent,它的width和height不代表實際尺寸,而代表“佔據”的尺寸,即使是一個空無一物的VBox,也可以設置其width和height(這一點與Sprite不同).

不 過UIComponent有一點和TextField類似,改變UIComponent的width和height不會改變UIComponent的 scaleX和scaleY,但是改變UIComponent的scaleX和scaleY會改變width和height. UIComponent中有unscaledWidth和unscaledHeight兩個屬性。unscaledWidth等於 width/scaleX, unscaledHeight等於height/scaleY.

因爲UICompoent涉及Flex的佈局,所以其中還有許多尺寸相關的屬性和函數,可以用來自動計算佈局。這裏就不一一介紹了。

最 後說一下MXML中的width屬性(attribute),它其實對應了該組件在ActionScript中的percentWidth和width兩 個屬性(property);而MXML中的height屬性(attribute)也對應了ActionScript中的percentHeight和 height兩個屬性(property)。


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

  * 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代碼。



原文地址:http://blog.csdn.net/rubyzhudragon/archive/2009/06/09/4256081.aspx
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章