AIR中使用:程序菜单,上下文菜单,右键菜单

Categories: Flex; Tagged with: ; @ October 21st, 2008 11:51

与窗口一样, 在一个AIR应用中, 菜单也是不可或缺的.

虽然在AIR中菜单有多种实现方式, 但是所有的Menu都是相同的,只是其实现方式不同而已,因此, 我们建立一个菜单, 使用不同的方式实现:

var menuFile:NativeMenu = new NativeMenu();
//如果需要在选择save时进行处理,则监听Event.SELECT事件, 如:save.addEventListener
var save:NativeMenuItem = new NativeMenuItem("Save");
var close:NativeMenuItem = new NativeMenuItem("Close");
menuFile.items = [save, close];

1. Window Menus [Windows平台下]

在苹果里叫做application menus, 不过本质都是相同的NativeMenu. 没有苹果机, 只说说Windows下的Window Menus. 当然也可以检查系统是否支持NativeMenu,或是application menus, 如:

if(NativeWindow.supportsMenu) ;

注意: 如果要在窗口中使用Window Menus , 他的配置文件或属性中systemChrome必须设置为"standard",否则将在编译时发生错误.

Window Menus的实现:

 if(NativeWindow.supportsMenu) { //检测是否支持Window menu
	var mainMenu:NativeMenu = new NativeMenu();
	mainMenu.addSubmenu(menuFile,"File"); //加入子菜单
	nativeWindow.menu = mainMenu; //将菜单加入到程序中.
}	

效果:

image

2.Context Menus 上下文菜单

我们可以给AIR程序中的Flash或基于Flash的对象设置Context Menu. 注意:

1. 在AIR中, Context Menu是 NativeMenu的实例, 而在Web应用中[Flex], 它是ContextMenu的实例

2. Context Menu可以在AIR应用之上或超出其范围显示. 它是系统级别的.

Context Menu的实现:

buttonOpen.contextMenu = menuFile;

效果:

image

3.Pop-Up Menus

你可以通过编程方式在任何时候使用Pop-Up Menus, 一般情况下,在用户按下某个键, 或是点击鼠标后弹出Pop-UpMenus. 不论是何种方式, 只需要运行NativeMenu实例的display()方法,将Pop-Up Menu显示便可.

监听textInput的右键Down事件:

textInput.addEventListener(MouseEvent.RIGHT_MOUSE_DOWN, onTextInputClicked);

该事件的响应函数,将会阻止在textInput中右键的默认菜单, 将其菜单换做上面我们定义的menuFile. 该响应函数如下:

private function onTextInputClicked(e:MouseEvent):void {
	e.preventDefault();
		menuFile.display(stage, mouseX, mouseY);
}

效果:

image

AIR中关闭所有打开的窗口

Categories: Flex; Tagged with: ; @ October 21st, 2008 10:18

在AIR工程中, 如果新建某个窗口, 当关闭主窗口时, 新窗口并不随着主窗口的关闭而关闭, 但是在很多情况下. 我们需要在主窗口关闭时, 所有的子窗口都一起关闭.

为了达到这个效果, 我们监听主窗口的Event.CLOSING事件, 当用户点击主窗口关闭按钮或是单击任务栏右键时, 我们采取一定措施, 关闭所有窗口.

在AIR中,openedWindows是一个包括了所有当前打开的窗口滴数组. 因此遍历该数组,将所有元素都关闭便可达到目的.

故Event.CLOSING的监听函数可以这么写:

/**主窗口点击关闭时,关闭所有打开的窗口*/
private function onMainWindowClose(e:Event):void {
	var wds:Array = NativeApplication.nativeApplication.openedWindows;
	for (var i:int = 0; i

运行代码,点击主窗口关闭按钮或是任务栏右键关闭时,所有窗口都将关闭.

另外,如果仅需要关闭主窗口之外的所有窗口, 可以在for循环结束之后增加e.preventDefault(),同时for循环修改为:

for (var i:int = 1; i

以阻止主窗口关闭,达到关闭其他窗口,保留主窗口的目的.

AIR中窗口的关闭

Categories: Flex; Tagged with: ; @ October 21st, 2008 10:00

在默认情况下, 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初始化时执行以上代码,变可出现以下结果:

image

点击新窗口关闭按钮时, 新窗口仅仅隐藏起来, 点击主窗口的”OPEN”时,将使得新窗口重新Active.

提示:

1.要监听Event.CLOSING事件, 不要搞成Event.CLOSE事件了….[最近表达能力有点小欠缺, 描述不清楚, 只好用”搞”]…

2. 主窗口不使用系统自带的框架与标题栏, 须在配置文件中设定  详见上一篇文章… 新窗口使用newWindow.systemChrome = “none”; 便可完成该效果.

略微总结下Air工程中的xml配置[描述]文件

Categories: Flex; Tagged with: ; @ October 20th, 2008 23:55

在Flex Builder中新建一个Air工程会自动产生一个对应的配置文件,[也许叫做描述文件会更加确切],  如新建一个名为"AIRTest"的工程, 则会产生一个"AIRTest-app.xml"的配置文件.  本文略加总结,  以稍事整理下自己有点小杂乱的思路:

当你在打包发布Air工程时, 就会用到该文件来提供一些信息. 这些信息包括但不限於:  该程序的一个唯一的ID, 版本, 安装时的显示信息等.

捡几个重要的说说:

1. [必须]application标签: 必须的, 是该配置文件的Root, 对于Air 1.1来说, 命名空间为:http://ns.adobe.com/air/application/1.1", 每一个版本的Air都有一个单独的命名空间. 其他的标签作为子标签嵌入在application中.

2.[必须]id标签: 指定该程序一个唯一的ID, 只有带有ID属性的Air程序才能被安装,.程序的ID由发布者的ID与id标签中指定的id组合而成.

3.[必须]filename标签: 指定生成的.air文件的名称

4.[可选]name标签: 用于指定AIR程序安装的默认目录, 当程序运行时第一屏显示中标题栏现实的标题, 如果不指定name的属性, 则使用filename代替.

5.[必须]version 标签:  Air不会对version进行任何干预或是操作, 完全由用户来控制,因此可以使用任何String来做为Verion, 如 1.0 , 2.5.1, 4.0a等

6.[可选]description: 安装时显示的描述

7.[可选]copyright: 版权信息

8.[必须]initialWindow标签: initialWindow标签属性为AIR程序指定实质性的内容, initialWindow下面有很多子标签, 但只有content是必须的. content用来描述AIR程序必须的.swf或.html文件.
    [可选]systemChrome标签: 是否使用系统提供的框架与标题栏, 默认值为"standard", 如果需要AIR程序去掉操作系统自带的标题栏等, 设置为"none"便可.
    [可选]transparent: 设定程序是否透明, 默认值为true, 但首要条件是systemChrome设置为none
   [可选]visible: 初始化时是否可见..  在你调整好程序的定位或是其他属性之后, 可以通过代码再设置为ture.
   [可选]minimizable, maximizable, resizable, 是否可以最小化,最大化, 调整大小. 默认都为true.
    [可选]width, height, 窗口的大小
    [可选]x,y: 程序的定位,左上角
    [可选]minSize, maxSize: 程序最小化,最大化后的窗口大小: 如: 400 200;
9. [可选]installFolder:  我们无法更改程序安装默认主目录[在Windows下, 为系统盘下的\Program Files], 只能通过installFolder设置该默认主目录下的子目录.

10.[可选]programMenuFolder 程序安装成功后, 在Windows开始菜单 所有程序中的文件夹; 在其他操作系统中将忽略该属性

11. [可选]icon 定义在桌面快捷方式, 快速启动栏, 缩略图等模式下的图像

12. [可选]customUpdateUI 设置为false时由AIR application installer来自动进行升级,无须用户干预, 设置为true时, 将弹出标准的AIR更新对话框.

13.[可选]allowBrowserInvocation: 是否允许用户通过浏览器中的连接来访问AIR程序. 默认为false

14.[可选] fileTypes: 注册AIR程序打开的某类文件.

Air中新建窗口 Create New Window In Air

Categories: Flex; Tagged with: ; @ October 20th, 2008 17:16

问题:在Air中新建一个窗口

代码实现:

在app初始化时执行以下函数,将新建并添加一个名为"New Winidow Test",长宽分别为200的窗口:

private function init():void {
	newWindow = new Window();
	newWindow.width = 200;
	newWindow.height = 200;
	newWindow.title = "New Winidow Test";
	newWindow.systemChrome = "none";
	newWindow.type = NativeWindowType.UTILITY
	newWindow.open();
}

如果需要设定该窗口的显示位置, 可通过监听AIREvent.WINDOW_COMPLETE事件来进行x,y的设定.

Newer Posts <-> Older Posts



// Proudly powered by Apache, PHP, MySQL, WordPress, Bootstrap, etc,.