少なくともFlex SDK 4.5.1では、
WindowApplication内に「動的配置したModuleで」リサイズイベントと同時に再配置したりするようなとき、nativeWIndow.maximize()、nativeWindow.restore()では「画面のサイズが変わる直前の」数値を取ってきてしまうようです。
なので、全画面からrestore()したら、全画面のときの数値でリサイズされる。
これを回避するのにベタかつスマートではないけど下記のような方法で対応。
import flash.events.NativeWindowDisplayStateEvent; import flash.events.TimerEvent; import flash.utils.Timer; //Timerで100ミリ秒後に1回イベント起こす private var resizeTimer:Timer=new Timer(100,1); protected function inith():void { //NativeWindowDisplayStateEventでnativeWindow状態変化を監視 this.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGE,resizeFire); //TimerEventのcompleteを監視 resizeTimer.addEventListener(TimerEvent.TIMER_COMPLETE,resizeComplete); } private function resizeFire(event:NativeWindowDisplayStateEvent):void { //リセットしてからスタート(Timerカウントを0→1(終了)とするため) resizeTimer.reset(); resizeTimer.start(); } private function resizeComplete(event:TimerEvent):void { //対象のModuleをリサイズ targetContent.dispatchEvent(new Event(Event.RESIZE)); }
ちゃんとやるならinvalidateProperties()とか使うもんだけどね。