创建本机菜单 (AIR)

Adobe AIR 1.0 和更高版本

本主题描述如何创建 AIR 所支持的各种类型的本机菜单。

创建根菜单对象

若要创建 NativeMenu 对象来充当菜单的根,请使用 NativeMenu 构造函数:

var root = new air.NativeMenu();

对于应用程序菜单和窗口菜单,根菜单表示菜单栏,并且应当只包含打开子菜单的项目。上下文菜单和弹出菜单没有菜单栏,因此根菜单可以包含命令和分隔线以及子菜单。

在创建菜单之后,可以添加菜单项。除非使用菜单对象的 addItemAt() 方法在给定索引处添加项目,否则项目以添加顺序出现在菜单中。

将菜单分配为应用程序、窗口、或图标菜单,或将其显示为弹出菜单,如以下几节所示:

设置应用程序菜单或窗口菜单

您的代码中应包含应用程序菜单(受 Mac OS 支持)和窗口菜单(受其他操作系统支持),这很重要

var root = new air.NativeMenu(); 
if (air.NativeApplication.supportsMenu) 
{ 
    air.NativeApplication.nativeApplication.menu = root; 
} 
else if (NativeWindow.supportsMenu) 
{ 
    nativeWindow.menu = root; 
}
注: Mac OS 定义了一个菜单,其中包含可用于每个应用程序的标准项目。将新 NativeMenu 对象分配给 NativeApplication 对象的 menu 属性可以替换标准菜单。还可以使用标准菜单,而不是替换它。

Adobe Flex 提供了 FlexNativeMenu 类,用于方便地创建跨平台工作的菜单。如果您使用的是 Flex 框架,请使用 FlexNativeMenu 类,而不要使用 NativeMenu 类。

设置停靠栏图标菜单或系统托盘图标菜单

air.NativeApplication.nativeApplication.icon.menu = root;
注: Mac OS X 为应用程序停靠栏图标定义了标准菜单。在将新 NativeMenu 分配给 DockIcon 对象的 menu 属性时,该菜单中的项目将显示在标准项目之上。不能删除、访问或修改标准菜单项。

以弹出方式显示菜单

 
root.display(window.nativeWindow.stage, x, y);

创建子菜单

若要创建子菜单,请将 NativeMenuItem 对象添加到父菜单,然后将定义子菜单的 NativeMenu 对象分配给该项目的 submenu 属性。AIR 提供了两种方式来创建子菜单项及其关联的菜单对象:

可以使用 addSubmenu() 方法在一个步骤中创建菜单项及其相关的菜单对象:

var editMenuItem = root.addSubmenu(new air.NativeMenu(), "Edit");

也可以创建菜单项,然后单独将菜单对象分配给其 submenu 属性:

var editMenuItem = root.addItem("Edit", false); 
editMenuItem.submenu = new air.NativeMenu();

创建菜单命令

若要创建菜单命令,请将 NativeMenuItem 对象添加到菜单,然后添加一个事件侦听器来引用实现菜单命令的函数:

var copy = new air.NativeMenuItem("Copy", false); 
copy.addEventListener(air.Event.SELECT, onCopyCommand); 
editMenu.addItem(copy);

可以在命令项本身上侦听 select 事件(如本例中所示),也可以在父菜单对象上侦听 select 事件。

注: 表示子菜单和分隔线的菜单项不调度 select 事件,因此不能用作命令。

创建菜单分隔线

若要创建分隔线,请创建 NativeMenuItem,并在构造函数中将 isSeparator 参数设置为 true 。然后,将分隔符项目添加到菜单中的正确位置:

var separatorA = new air.NativeMenuItem("A", true); 
editMenu.addItem(separatorA);

不显示为分隔符指定的标签(如果有)。