您的位置:首页 > 大数据 > 人工智能

Adobe AIR右键菜单和系统托盘(Tray)功能以及实现方法

2014-03-11 16:50 776 查看
Adobe AIR右键菜单和系统托盘(Tray)功能以及实现方法

AIR教程

Adobe AIR右键菜单和系统托盘(Tray)功能以及实现方法

右键菜单:

var mainMenu:NativeMenu = new NativeMenu();

var minimizeMenu:NativeMenuItem = new NativeMenuItem("Minimize");

var maximizeMenu:NativeMenuItem = new NativeMenuItem("Maximize");

var sepMenu:NativeMenuItem = new NativeMenuItem("",true);

var restoreMenu:NativeMenuItem = new NativeMenuItem("Restore");

var closeMenu:NativeMenuItem = new NativeMenuItem("Close");

minimizeMenu.addEventListener(Event.Select, handleMenuClick);

maximizeMenu.addEventListener(Event.Select, handleMenuClick);

restoreMenu.addEventListener(Event.Select, handleMenuClick);

closeMenu.addEventListener(Event.Select, handleMenuClick);

mainMenu.addItem(minimizeMenu);

mainMenu.addItem(maximizeMenu);

mainMenu.addItem(sepMenu);

mainMenu.addItem(restoreMenu);

mainMenu.addItem(closeMenu);

this.contextMenu=mainMenu;

系统托盘:

var sysTray:SystemTrayIcon =

NativeApplication.nativeApplication.icon as SystemTrayIcon;

sysTray.tooltip = "测试tray";

//

sysTray.menu = this.contextMenu;

sysTray.addEventListener(MouseEvent.CLICK,trayClick);

如何将应用程序最小化到托盘,然后给托盘图标加右键菜单以及添加相应的事件,来激活应用程序窗体.

整个流程:

1. 初始化应用时改变系统默认情况下以系统X事件的处理.

2. 定义新处理逻辑(本文是弹出对话框)

3. 生成托盘图标并置于状态栏

4. 给托盘图标加上右键菜单(本文是exit,和open两项)

5. 给菜单加上相应的事件

6. 大功告成

主要方法:

1. private var dockImage:BitmapData;

2.

3. //初始化Application里调用此方法,完成上面的第一步:

4. public function initApplication():void{

5. var loader:Loader=new Loader();

6. loader.contentLoaderInfo.addEventListener(Event.COMPLETE,prepareForSystray);//这里就是完成第一步的任务须,这个prepareForSystray就是对托盘的生在和菜单的控制

7. loader.load(new URLRequest("assets/images/32.png"));//这里先要加载托盘图标的小图片

8. this.addEventListener(Event.CLOSING,closingApplication);//设置关闭体的事件

9. }

10.

11. //关闭窗体的事件

12. public function closingApplication(event:Event):void{

13. event.preventDefault();//阻止默认的事件

14. Alert.yesLabel="Close";

15. Alert.noLabel="Mini";

16. Alert.show("Close or Minimize?", "Close?", 3, this, alertCloseHandler);//弹出自定义的选择框, 关于Alert的详细用法,参考官方文档或我前面的相关文章.

17. }

18. //根据用户的选择来判断做什么,这里选择是就是关闭,选择否(Mini)就是最小化到托盘.

19. private function alertCloseHandler(event:CloseEvent):void{

20. if(event.detail==Alert.YES){

21. closeApp(event);

22. }else{

23. dock();//最小化到托盘

24. }

25. }

26.

27. //生成托盘

28. public function prepareForSystray(event:Event):void{

29. dockImage=event.target.content.bitmapData;

30. if(NativeApplication.supportsSystemTrayIcon){

31. setSystemTrayProperties();//设置托盘菜单的事件

32. SystemTrayIcon(NativeApplication.nativeApplication.icon).menu=createSystrayRootMenu();//生成托盘菜单

33. }

34. }

35.

36. public function createSystrayRootMenu():NativeMenu{

37. var menu:NativeMenu = new NativeMenu();

38. var openNativeMenuItem:NativeMenuItem = new NativeMenuItem("Open");//生成OPEN菜单项

39. var exitNativeMenuItem:NativeMenuItem = new NativeMenuItem("Exit");//同理

40. openNativeMenuItem.addEventListener(Event.SELECT, undock);

41. exitNativeMenuItem.addEventListener(Event.SELECT, closeApp);//添加EXIT菜单项事件

42. menu.addItem(openNativeMenuItem);

43. menu.addItem(new NativeMenuItem("",true));//separator

44. menu.addItem(exitNativeMenuItem);//将菜单项加入菜单

45.

46. return menu;

47.

48. }

49. //设置托盘图标的事件

50. private function setSystemTrayProperties():void{

51. SystemTrayIcon(NativeApplication.nativeApplication .icon).tooltip = "TurboSquid squidword";

52. SystemTrayIcon(NativeApplication.nativeApplication .icon).addEventListener(MouseEvent.CLICK, undock);

53. stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, nwMinimized);

54. }

55.

56. //最小化窗体

57. private function nwMinimized(displayStateEvent:NativeWindowDisplayStateEvent):void {

58. if(displayStateEvent.afterDisplayState == NativeWindowDisplayState.MINIMIZED) {

59. displayStateEvent.preventDefault();//阻止系统默认的关闭窗体事件

60. dock();//将程序放入托盘

61. }

62. }

63.

64. //将本地应用程序放到托盘

65. public function dock():void {

66. stage.nativeWindow.visible = false; //设置本地程序窗体不可见

67. NativeApplication.nativeApplication.icon.bitmaps = [dockImage];//设置托盘的图标

68. }

69.

70. //激活程序窗体

71. public function undock(evt:Event):void {

72. stage.nativeWindow.visible = true;//设置本地程序窗体可见

73. stage.nativeWindow.orderToFront();//设置本地程序窗体到最前端

74. NativeApplication.nativeApplication .icon.bitmaps = [];将托盘图标清空

75. }

76.

77. //关闭程序窗体

78. private function closeApp(evt:Event):void {

79. stage.nativeWindow.close();

80. }

81.

用Flex建立一个100%窗口透明的AIR程序,以及打包成.AIR文件

Flex建立一AIR程序

窗口透明的AIR程序

打包成.AIR文件

第一步:打开FLEX3 创建一个 FLEX project

接着是命名,并选中 Desktop application 在AIR中运行

自动生产XML配置文件

创建好以后FLEX3会自动生产一些文件,再Src文件夹里会有两个XML描述语言:

.MXML文件为前台描述文件

.XML里面可以更改一些系统配置

本例:去除AIR窗口,并让AIR程序边界透明。

我们打开airia_ex_login-app.xml这个文件

找到: <systemChrime></systemChrime> 和 <transparent></transparent>

修改为下图蓝色区域。

<systemChrime>none</systemChrime> 表示没有系统窗口

<transparent>true</transparent> 表示开启背景透明

注意:要去掉<!-- --> 也就是说,本身默认文件是把这两项给注释掉了,我们现在把他启用。

注意2:本教程省略了案例中“AIR界面UI设计”的过程,UI界面源文件在附件内里有。

这样我们就完成了第一步。运行一下看看结果?

我们发现FLEX有个默认的STYLE显示了出来。我们现在要想办法把他去掉

第二步:配置MXML文件中的“mx:WindowedApplication”

在 mx:WindowedApplication 内添加一下定制便可去掉FLEX默认的风格界面。

showFlexChrome="false"

alwaysInFront="true"

layout="absolute"

这里我们再把界面大小设定好。

width="314"

height="460"

如图:

再次运行看看:

GOOD!一个完美100%透明的AIR RUN起来了。

也许你还会碰到一下问题

窗口没办法在桌面拖动?

没办法关闭和最小化?

请关注AIRIA.cn原创教程的下一集

最后把此例的源文件、工程文件、安装.AIR文件全部提供给大家下载参考,忘各位网友支持AIRIA的发展。

附件:

扩展参考:flex制作一个用户登录框(含验证码)

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"

fontSize="12" horizontalAlign="center" creationComplete="init()">

<mx:Script>

<![CDATA[ import mx.controls.Alert; private function init():void{ generate.text=generateCheckCode(); } //login identifying private function loginHandler():void{ if(user.text==""||pass.text==""){ Alert.show("user or pass is empty","tips"); }else{ if(user.text=="shane"&&pass.text=="shane"
&&identify.text.toLowerCase()==generate.text.toLowerCase()){ Alert.show("login is OK","tips"); currentState="hollow"; }else{ if(identify.text.toLowerCase()!=generate.text.toLowerCase()){ Alert.show("indentifyCode is error","tips"); generate.text=generateCheckCode();
}else{ Alert.show("user or pass error","tips"); } } } } //clear private function clearHandler():void{ user.text=pass.text=""; } //generate identifying coder private function generateCheckCode():String{ //init var num:Number; var code:String; var checkCode:String="";
for(var i:int=0;i<5;i++){ num=Math.round(Math.random()*100000); if(num%2==0){ code=String.fromCharCode(48+(num%10)); }else{ code=String.fromCharCode(65+(num%26)); } checkCode +=code; } return checkCode; } ]]>

</mx:Script>

<mx:Panel id="panel" x="143" y="115" width="350" height="229" layout="absolute" title="login">

<mx:Button id="btnLogin" x="73" y="141" label="login" click="loginHandler()"/>

<mx:Button id="btnClear" x="167" y="141" label="clear" click="clearHandler()"/>

<mx:Label x="44" y="31" text="user"/>

<mx:Label x="44" y="64" text="pass"/>

<mx:TextInput id="user" x="81" y="31"/>

<mx:TextInput id="pass" x="81" y="62" displayAsPassword="true"/>

<mx:Text x="28" y="100" text="identify"/>

<mx:TextInput x="81" y="98" width="50" id="identify"/>

<mx:Label x="139" y="100" width="48" id="generate"/>

<mx:Label x="195" y="100" text="看不清楚 换个~~" click="generateCheckCode()"/>

</mx:Panel>

<mx:states>

<mx:State name="hollow">

<mx:RemoveChild target="{panel}"/>

<mx:AddChild position="lastChild">

<mx:Label text="hollow marshane" x="0" y="200" fontSize="200" color="red"/>

</mx:AddChild>

</mx:State>

</mx:states>

</mx:Application>

自动配置和在线安装Adobe AIR运行环境(AIR Express Install Badge )

接触Adobe AIR的朋友一定会有这样一个疑惑:

如果客户的电脑上没装Adobe AIR运行环境怎么办?

事实上,我们明白,在Adobe AIR普及率还不算高的今天(尤其在中国)总是告诉客户“请先下载Adobe AIR1.1”会显得太不“友好”。因为可能网友们一时半会还没明白“AIR”是什么,我为什么要安装这个东西?

现在给大家介绍来自Adobe的解决方案:AIR Express Install Badge

如果你需要发布一个Adobe AIR应用,没有安装Adobe AIR运行环境的客户机它会为你自动地先安装Adobe AIR运行环境,然后再安装Adobe AIR应用。当然已经安装了AIR运行环境的就会直接安装AIR应用了. 这种在线安装AIR的方法很方便。

AIR Express Install Badge 事实上是一种Adobe AIR推出的“在线安装”AIR应用的方式。

怎样创建一个Adobe AIR应用在线安装?(步骤和下载):

• 首先需要下载和配置AIR SDK [ 下载1(AIR at WIN)下载2 (AIR at mac)更多SDK AIR Flash开发中心 ]

• 然后需要创建一个在线安装时用的图片

• 接着可以使用Flash来创建一个安装动画

简而言之,这个方法就是使用一个Flash动画作为在线安装的前端(因为FLASH的普及率是相当高的),这个时候通过FLASH来判断客户端是否有Adobe AIR运行环境,如果没有则自动先安装Adobe AIR运行环境(当然时间也会变的长一些,需要下载、安装),接着再自动安装这个AIR应用。这个过程客户几乎察觉不到他安装了AIR。

Adobe AIR应用在线安装(配置方法) :

1.创建安装FLASH动画的背景图像

创建一个215px x 100px 图像,被用来作为背景。 默认的在线安装区域为 217px x 180px 。

2.配置SWF

参数:

• 应用程序名称(appname):也就是你的AIR应用的名称。

• 应用程序路径 (appurl):你的AIR应用程序的下载路径。 (比如:http://www.AIRia.cn/myAirApp.air)

• AIR版本(airversion): AIR应用的版本。比如AIR1.1

• 安装按钮的颜色(buttoncolor) :如果需要,可以试用十六进制定义一个按钮颜色。(默认是灰色)

• 安装文字信息的颜色(messgagecolor) :如果需要,可以试用十六进制定义一个按钮颜色。(默认是黑色)

• 背景图像地址(imageurl):背景图像地址。

像这样:

AIRia编者:如果你想让你的AIR应用为更多人接受,那么你不得不选择这个方法。但国外也有很多人反对这种做法,因为这没有征求客户的同意就安装了另外一个插件,部分人也质疑这种在线安装的安全性,本文不就这些问题进行讨论。本文为本站原创(参考了一些英文信息),转载自AIRia!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: