年尾月初来一发,关于桌面AIR的相关知识点整理(二)
接 年尾月初来一发,关于桌面AIR的相关知识点整理(一) 上一篇说了打包exe的过程
这篇说说上面说的相关知识点
桌面AIR全屏代码
stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
在swf里面我们使用 fscommand来实现全屏 而在AIR中 这个行不通 ,而且通过配置的fullscreen有只是适用移动AIR 所以桌面版就用上面的代码,上面这个是允许交互的全屏
还有一个是 stage.displayState = StageDisplayState.FULL_SCREEN;不允许交互。
我们使用第一种,因为需要获取到键盘输入
桌面版AIR 阻止ESC 按键关闭全屏
stage.addEventListener(KeyboardEvent.KEY_DOWN,onDown ); private function onDown( e:KeyboardEvent ):void { if( e.keyCode == Keyboard.ESCAPE ){ e.preventDefault(); } }
即 取消事件的默认行为,由于windows上面ESC 默认行为是关闭窗口,所以可以阻止
桌面版AIR 防止通过air菜单栏关闭按钮关闭程序,以及防止通过windows菜单栏关闭程序
stage.nativeWindow.addEventListener(Event.CLOSING,onExitHandler ); private function onExitHandler( e:Event ):void { e.preventDefault(); }
监听退出事件 同时阻止其默认行为即可。
桌面版AIR手动关闭窗口
stage.nativeWindow.close();
桌面版AIR防止返回桌面时关闭窗口
在AIR全屏下是没法点击windows菜单栏右下角的返回桌面的。但是可以通过开始键+D 组合来返回桌面,那么这个时候所有打开的窗口都会最小化
stage.nativeWindow.alwaysInFront = true;//让此窗口始终保持在最前面 stage.addEventListener(Event.DEACTIVATE,onDeactiveHandler ); private function onDeactiveHandler( e:Event ):void { stage.nativeWindow.activate();//在关闭的时候 激活 }
即通过上面的代码然后结合 阻止AIR窗口 关闭的代码,可以实现在返回桌面的时候 也不能关闭窗口
PS:由于我所做的内容其实是不会全屏的 不然会不清晰,所以保持了舞台不进行缩放。同时设置了app.xml的配置
<systemChrome>none</systemChrome><transparent>true</transparent> 让其成为一个透明的窗口。这样的视野感觉就很开阔,效果要好一些,但是有个特性是,当背景透明时,会自动将其设置为visible,那么当我们的AIR全屏情况下,桌面的图标依然是可以点击的。这个不是我想要的,解决方法是 绘制一个透明度比0大一点点的Sprite并且大小为全屏大小。这样的话就可以防止点击桌面图标了。
stage.addEventListener(Event.RESIZE,onResizeHandler ); private var b:Boolean; protected function onResizeHandler(event:Event):void { if( b ){ var _s:Sprite = getSprite( stage.stageWidth,stage.stageHeight ); stage.addChildAt( _s,0 ); _s.alpha = 0.1; } b = true; }
由于打开程序的时候 RESIZE事件会派发两次,所以这里做了一个判断 只需一次即可。