在 SWF 内容中,对于从 InteractiveObject 继承的任何对象,通过将菜单对象分配给该对象的
contextMenu
属性,可以为该对象指定上下文菜单。默认情况下包含的几个命令有:“前进”、“后退”、“打印”、“品质”和“缩放”。在 AIR 运行时中,指定给
contextMenu
的菜单对象的类型可以是 NativeMenu 或 ContextMenu。在 Flash Player 运行时中,仅 ContextMenu 类可用。
可以在使用 ContextMenu 和 ContextMenuItem 类时侦听本机菜单事件或上下文菜单事件;两者都已调度。ContextMenuEvent 对象属性所具有的一个优势为:contextMenuOwner 可识别与菜单关联的对象,而
mouseTarget
可识别为打开菜单曾单击的对象。NativeMenuEvent 对象中无此信息。
以下示例创建一个 Sprite,并添加一个简单的编辑上下文菜单:
var sprite:Sprite = new Sprite();
sprite.contextMenu = createContextMenu()
private function createContextMenu():ContextMenu{
var editContextMenu:ContextMenu = new ContextMenu();
var cutItem:ContextMenuItem = new ContextMenuItem("Cut")
cutItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCutCommand);
editContextMenu.customItems.push(cutItem);
var copyItem:ContextMenuItem = new ContextMenuItem("Copy")
copyItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCopyCommand);
editContextMenu.customItems.push(copyItem);
var pasteItem:ContextMenuItem = new ContextMenuItem("Paste")
pasteItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doPasteCommand);
editContextMenu.customItems.push(pasteItem);
return editContextMenu
}
private function doCutCommand(event:ContextMenuEvent):void{trace("cut");}
private function doCopyCommand(event:ContextMenuEvent):void{trace("copy");}
private function doPasteCommand(event:ContextMenuEvent):void{trace("paste");}
注:
与在浏览器环境中显示的 SWF 内容相比,AIR 中的上下文菜单没有任何内置命令。
自定义 Flash Player 上下文菜单
在浏览器或放映文件中,SWF 内容中的上下文菜单总包含内置项。您可以删除菜单中“设置”和“关于”命令外的所有这些默认命令。如果将 Stage 属性
showDefaultContextMenu
设置为
false
,则会从上下文菜单中删除这些命令。
要为特定显示对象创建自定义的上下文菜单,请创建 ContextMenu 类的一个新实例,调用
hideBuiltInItems()
方法,并将该实例分配给该 DisplayObject 实例的
contextMenu
属性。下面的示例为一个动态绘制的正方形提供了一个上下文菜单命令,用于将其更改为随机颜色:
var square:Sprite = new Sprite();
square.graphics.beginFill(0x000000);
square.graphics.drawRect(0,0,100,100);
square.graphics.endFill();
square.x =
square.y = 10;
addChild(square);
var menuItem:ContextMenuItem = new ContextMenuItem("Change Color");
menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,changeColor);
var customContextMenu:ContextMenu = new ContextMenu();
customContextMenu.hideBuiltInItems();
customContextMenu.customItems.push(menuItem);
square.contextMenu = customContextMenu;
function changeColor(event:ContextMenuEvent):void
{
square.transform.colorTransform = getRandomColor();
}
function getRandomColor():ColorTransform
{
return new ColorTransform(Math.random(), Math.random(), Math.random(),1,(Math.random() * 512) - 255, (Math.random() * 512) -255, (Math.random() * 512) - 255, 0);
}