AS3 - 何时会执行updateDisplayList()方法的总结
开发Flex时不可避免的要使用或重写组件的updateDisplayList()方法,下面对何时会调用updateDisplayList()方法做个总结:
1,使用 addChild() 方法将组件添加到容器时,会先执行父容器的updateDisplayList(),再执行子对象的updateDisplayList()
2,调用组件的 invalidateDisplayList() 方法时
3,调用组件setStyle()方法设置样式时,会调用styleChanged()方法,如果发现该样式不存在或者样式值与当前的值不统一,该方法里面又调用invalidateDisplayList() 方法
4,设置子组件的宽,高等相关的属性,会调用父容器的updateDisplayList()方法。(比如width,height,percentWidth,explicitMinWidth,explicitWidth等)
注:1,设置子组件的x,y不会调用父容器的updateDisplayList()方法
2,用setActualSize()来设置子组件的宽高,不会再调用父容器的updateDisplayList()方法
3,如果子组件includeInLayout = false,则设置子组件的width,height也不会再调用父容器的updateDisplayList()方法
override public function set height(value:Number):void { if (explicitHeight != value) { explicitHeight = value; // We invalidate size because locking in width // may change the measured height in flow-based components. invalidateSize(); } if (_height != value) { invalidateProperties(); invalidateDisplayList(); var p:IInvalidating = parent as IInvalidating; if (p && includeInLayout) { p.invalidateSize(); p.invalidateDisplayList(); } _height = value; dispatchEvent(new Event("heightChanged")); } }