在默认情况下, AIR程序中已经被关闭的窗口不可以再次打开的.因此我们通过visible属性 来模拟打开关闭[ 没有关闭, 只是隐藏]:
以下代码新建了一个窗口, 并监听Event.CLOSING事件, 阻止默认行为, 使得用户在点击关闭窗口时,窗口只隐藏而不关闭, 当用户再次点击主窗口的”OPEN”时, 该新窗口又会出现,.
import mx.messaging.AbstractConsumer; import mx.events.AIREvent; import mx.controls.Button; import mx.core.Window; private var newWindow:Window; /**初始化*/ private function init():void { title = "Main Window"; //设定标题栏显示的名称 addNewWindow(); //增加一个新窗口 //增加一个Button var buttonOpen:Button = new Button(); buttonOpen.label = "OPEN"; buttonOpen.addEventListener(MouseEvent.CLICK, onOpenButtonClicked); addChild(buttonOpen); } /**创建新窗口并打开*/ private function addNewWindow():void { newWindow = new Window(); newWindow.width = 200; newWindow.height = 200; newWindow.title = "New Winidow Test"; newWindow.type = NativeWindowType.UTILITY //设定类型 newWindow.systemChrome = "none"; //去除系统自带的框架与标题栏 //监听AIREvent.WINDOW_COMPLETE函数,当创建完毕后执行onWindowComplete newWindow.addEventListener(AIREvent.WINDOW_COMPLETE, onWindowComplete); //监听Event.CLOSING,当用户点击关闭时,呼叫onClose newWindow.addEventListener(Event.CLOSING, onClose); newWindow.open(); } /**创建完毕后的响应函数, 用于设定新窗口的位置*/ private function onWindowComplete(e:AIREvent):void { e.target.stage.nativeWindow.x = (Capabilities.screenResolutionX - e.target.stage.nativeWindow.width)/2; e.target.stage.nativeWindow.y = (Capabilities.screenResolutionY - e.target.stage.nativeWindow.height)/2; } /**当主窗口的"OPEN"点击后,执行该函数,将新窗口重新设置为active,看起来便是关闭后,点击"OPEN"将新窗口从新打开*/ private function onOpenButtonClicked(e:MouseEvent):void { newWindow.activate(); } /**当点击关闭后,将窗口设为不可见,同时阻止默认行为的发生*/ private function onClose(e:Event):void { e.preventDefault(); newWindow.visible = false; }
在一个MXML初始化时执行以上代码,变可出现以下结果:
点击新窗口关闭按钮时, 新窗口仅仅隐藏起来, 点击主窗口的”OPEN”时,将使得新窗口重新Active.
提示:
1.要监听Event.CLOSING事件, 不要搞成Event.CLOSE事件了….[最近表达能力有点小欠缺, 描述不清楚, 只好用”搞”]…
2. 主窗口不使用系统自带的框架与标题栏, 须在配置文件中设定 详见上一篇文章… 新窗口使用newWindow.systemChrome = “none”; 便可完成该效果.
略微总结下Air工程中的xml配置[描述]文件 <->
// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.