2011-08-24 173 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