2011-08-24 408 views
0

我需要一些代碼在其子組件的所有尺寸都已知之後運行。該組件具有絕對佈局。我認爲我的組件的measure()函數在調用了所有兒童的measure()函數後就會被調用,但它好像是因爲它具有絕對佈局,所以它甚至從來沒有調用measure。把佈局代碼放在哪裏

反正,這是一個畫布和我的override protected function measure():void從未運行。我究竟做錯了什麼?

回答

1

的updateDisplayList()被調用UIComponent的的commitProperties。我相信這是在孩子大小已知之後調用的,並且它是您應該放置佈局代碼的位置。

當您在組件上明確設置寬度和高度時,不會調用measure()。如果在Canvas上有絕對佈局,但不設置寬度和高度,則會調用measure()。

HTH;

艾米

0

您不需要重寫任何內容,只需將偵聽器添加到組件的creationComplete即可。此事件是「組件完成其構建,物業處理,測量,佈局和繪圖時分派的事件。」

實施例,其中該組件從s繼承:

<?xml version="1.0" encoding="utf-8"?> 
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300" 
    creationComplete="group1_creationCompleteHandler(event)"> 
<fx:Script> 
    <![CDATA[ 
     import mx.events.FlexEvent; 

     protected function group1_creationCompleteHandler(event:FlexEvent):void 
     { 
      //TODO add code here 
     } 

    ]]> 
</fx:Script> 
</s:Group> 
+0

是啊,我知道creationComplete將工作,但它會是一種浪費等到組件畫完,然後改變佈局,使之再次戰平。我希望能夠在測量和繪圖之間的某個位置捕獲它 – pseudopeach

+0

您應該使用initialize事件(在所有childs被添加時調用)或渲染事件(在渲染之前調用),而不是creationComplete。我會嘗試首先進行初始化 – Exort