接 年尾月初来一发,关于桌面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事件会派发两次,所以这里做了一个判断 只需一次即可。

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Free Web Hosting