我需要一些代码在其子组件的所有尺寸都已知之后运行。该组件具有绝对布局。我认为我的组件的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