我需要一些代碼在其子組件的所有尺寸都已知之後運行。該組件具有絕對佈局。我認爲我的組件的measure()函數在調用了所有兒童的measure()函數後就會被調用,但它好像是因爲它具有絕對佈局,所以它甚至從來沒有調用measure。把佈局代碼放在哪裏
反正,這是一個畫布和我的override protected function measure():void
從未運行。我究竟做錯了什麼?
我需要一些代碼在其子組件的所有尺寸都已知之後運行。該組件具有絕對佈局。我認爲我的組件的measure()函數在調用了所有兒童的measure()函數後就會被調用,但它好像是因爲它具有絕對佈局,所以它甚至從來沒有調用measure。把佈局代碼放在哪裏
反正,這是一個畫布和我的override protected function measure():void
從未運行。我究竟做錯了什麼?
的updateDisplayList()被調用UIComponent的的commitProperties。我相信這是在孩子大小已知之後調用的,並且它是您應該放置佈局代碼的位置。
當您在組件上明確設置寬度和高度時,不會調用measure()。如果在Canvas上有絕對佈局,但不設置寬度和高度,則會調用measure()。
HTH;
艾米
您不需要重寫任何內容,只需將偵聽器添加到組件的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>
是啊,我知道creationComplete將工作,但它會是一種浪費等到組件畫完,然後改變佈局,使之再次戰平。我希望能夠在測量和繪圖之間的某個位置捕獲它 – pseudopeach
您應該使用initialize事件(在所有childs被添加時調用)或渲染事件(在渲染之前調用),而不是creationComplete。我會嘗試首先進行初始化 – Exort