包 | flash.ui |
类 | public final class ContextMenu |
继承 | ContextMenu NativeMenu EventDispatcher Object |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
移动浏览器支持:移动浏览器不支持此类。
AIR 配置文件支持:移动设备或 AIR for TV 设备不支持此功能。有关在多个配置文件之间支持 API 的详细信息,请参阅 AIR 配置文件支持。
在 Flash Player 中,用户可以通过右键单击(Windows 或 Linux)或按住 Control 并单击 (Macintosh) Flash Player 打开上下文菜单。使用 ContextMenu 类的方法和属性可以添加自定义菜单项、控制内置上下文菜单项(如“放大”和“打印”)的显示或者创建菜单的副本。在 AIR 中,没有内置菜单项,也没有标准上下文菜单。
在 Flash Professional 中,您可以将 ContextMenu 对象附加到特定的按钮、影片剪辑或文本字段对象,也可以附加到整个影片级别。使用 InteractiveObject 类的 contextMenu
属性可做到这一点。
在 Flex 或 Flash Builder 中,只有应用程序中的顶层组件才能拥有上下文菜单。例如,如果 DataGrid 控件是 TabNavigator 或 VBox 容器的子级,则 DataGrid 控件不能拥有其自己的上下文菜单。
为了向 ContextMenu 对象中添加新项,可以创建一个 ContextMenuItem 对象,然后将该对象添加到 ContextMenu.customItems
数组。有关创建上下文菜单项的详细信息,请参阅 ContextMenuItem 类条目。
Flash Player 有三种类型的上下文菜单:标准菜单(当您在 Flash Player 中右键单击时出现)、编辑菜单(当您在可选择或可编辑的文本字段中右键单击时出现)和错误菜单(当 SWF 文件未能加载到 Flash Player 中时出现)。只有标准菜单和编辑菜单才能使用 ContextMenu 类进行修改。AIR 中只显示编辑菜单。
自定义菜单项始终出现在 Flash Player 上下文菜单的顶部,并位于所有可见内置菜单项之上;内置菜单项和自定义菜单项之间由一个分隔条加以分隔。您不能从上下文菜单中删除“设置”菜单项。在 Flash 中,必须有“设置”菜单项,以便用户能够访问影响其计算机上的隐私和存储的设置。您也不能删除“关于”菜单项,必须具有这个菜单项,以便用户能够了解正在使用的 Flash Player 的版本。(AIR 中不使用内置的“设置”和“关于”菜单项。)
最多可以向 Flash Player 中的上下文菜单添加 15 个自定义项。AIR 中对上下文菜单中的项数没有明确限制。
必须在使用 ContextMenu()
构造函数创建 ContextMenu 对象后才能调用其方法。
相关 API 元素
属性 | 由以下参数定义 | ||
---|---|---|---|
builtInItems : ContextMenuBuiltInItems
ContextMenuBuiltInItems 类具有以下属性的实例:forwardAndBack、loop、play、print、quality、rewind、save 和 zoom。 | ContextMenu | ||
clipboardItems : ContextMenuClipboardItems
ContextMenuClipboardItems 类具有以下属性的实例:cut、copy、paste、delete 和 selectAll。 | ContextMenu | ||
clipboardMenu : Boolean
指定是否应使用剪贴板菜单。 | ContextMenu | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
customItems : Array
ContextMenuItem 对象的数组。 | ContextMenu | ||
isSupported : Boolean [静态] [只读]
如果当前平台支持 ContextMenu 类,则 isSupported 属性设置为 true,否则,设置为 false。 | ContextMenu | ||
items : Array [覆盖]
此菜单中自定义项的数组。 | ContextMenu | ||
link : URLRequest
链接的 URLRequest。 | ContextMenu | ||
numItems : int [覆盖] [只读]
此菜单中的项数。 | ContextMenu | ||
parent : NativeMenu [只读]
父菜单。 | NativeMenu |
方法 | 由以下参数定义 | ||
---|---|---|---|
创建 ContextMenu 对象。 | ContextMenu | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。 | EventDispatcher | ||
在菜单底部添加一个菜单项。 | NativeMenu | ||
[覆盖]
在菜单底部添加一个菜单项。 | ContextMenu | ||
通过插入新菜单项,在菜单中添加子菜单。 | NativeMenu | ||
通过在指定位置插入新菜单项,在菜单中添加子菜单。 | NativeMenu | ||
[覆盖]
创建指定 ContextMenu 对象的副本。 | ContextMenu | ||
[覆盖]
报告此菜单是否包含指定的菜单项。 | ContextMenu | ||
将事件调度到事件流中。 | EventDispatcher | ||
[覆盖]
在指定位置弹出此菜单。 | ContextMenu | ||
[覆盖]
获取指定索引处的菜单项。 | ContextMenu | ||
获取具有指定名称的菜单项。 | NativeMenu | ||
[覆盖]
获取指定项目的位置。 | ContextMenu | ||
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | ||
表示对象是否已经定义了指定的属性。 | Object | ||
隐藏指定的 ContextMenu 对象中的所有内置菜单项(“设置”除外)。 | ContextMenu | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
表示指定的属性是否存在、是否可枚举。 | Object | ||
[覆盖]
删除菜单中的所有项目。 | ContextMenu | ||
从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | ||
删除指定的菜单项。 | NativeMenu | ||
[覆盖]
删除并返回指定索引处的菜单项。 | ContextMenu | ||
将菜单项移到指定位置。 | NativeMenu | ||
设置循环操作动态属性的可用性。 | Object | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何祖代为指定事件类型注册了事件侦听器。 | EventDispatcher |
事件 | 摘要 | 由以下参数定义 | ||
---|---|---|---|---|
[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。 | EventDispatcher | |||
[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。 | EventDispatcher | |||
此 NativeMenu 对象在显示菜单前立即进行调度。 | NativeMenu | |||
在用户首次生成上下文菜单但尚未显示上下文菜单内容时调度。 | ContextMenu | |||
在显示菜单之前的一瞬间且按下等效键时,由 NativeMenu 对象调度。 | NativeMenu | |||
在选择其菜单项之一或其后代子菜单之一中的项目时由此 NativeMenu 对象调度。 | NativeMenu |
builtInItems | 属性 |
builtInItems:ContextMenuBuiltInItems
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
ContextMenuBuiltInItems 类具有以下属性的实例:forwardAndBack
、loop
、play
、print
、quality
、rewind
、save
和 zoom
。将这些属性设置为 false
将删除指定的 ContextMenu 对象中的对应菜单项。这些属性是可枚举的属性,默认情况下设置为 true
。
注意:在 AIR 中,上下文菜单没有内置项。
实现
public function get builtInItems():ContextMenuBuiltInItems
public function set builtInItems(value:ContextMenuBuiltInItems):void
相关 API 元素
clipboardItems | 属性 |
clipboardItems:ContextMenuClipboardItems
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
ContextMenuClipboardItems 类具有以下属性的实例:cut
、copy
、paste
、delete
和 selectAll
。若将其中一个属性设置为 false
,则禁用剪贴板菜单中的相应项。
实现
public function get clipboardItems():ContextMenuClipboardItems
public function set clipboardItems(value:ContextMenuClipboardItems):void
相关 API 元素
示例 ( 如何使用本示例 )
ContextMenu
对象的 clipboardItems
属性的用法。创建一个 ContextMenu
并将其 clipboardMenu
属性设置为 true
。添加 MENU_SELECT
事件的事件处理函数(通常是右键单击),并将菜单分配给一个显示对象。在这种情况下,将启用 copy
和 paste
菜单。
package { import flash.ui.ContextMenu; import flash.events.ContextMenuEvent; import flash.display.Sprite; public class ContextMenuClipboardItemsExample extends Sprite { public function ContextMenuClipboardItemsExample() { var myContextMenu:ContextMenu = new ContextMenu(); myContextMenu.clipboardMenu = true; myContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler); var rc:Sprite = new Sprite(); rc.graphics.beginFill(0xDDDDDD); rc.graphics.drawRect(0,0,100,30); addChild(rc); rc.contextMenu = myContextMenu; } function menuSelectHandler(event:ContextMenuEvent):void { event.contextMenuOwner.contextMenu.clipboardItems.copy = true; event.contextMenuOwner.contextMenu.clipboardItems.paste = true; } } }
clipboardMenu | 属性 |
customItems | 属性 |
customItems:Array
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
ContextMenuItem 对象的数组。数组中的每个对象表示您已经定义的上下文菜单项。使用此属性可添加、删除或修改这些自定义菜单项。
要添加新的菜单项,请创建一个 ContextMenuItem 对象,然后将其添加到 customItems
数组(例如使用 Array.push()
)。有关创建菜单项的详细信息,请参阅 ContextMenuItem 类条目。
实现
public function get customItems():Array
public function set customItems(value:Array):void
相关 API 元素
isSupported | 属性 |
items | 属性 |
link | 属性 |
link:URLRequest
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
链接的 URLRequest
。如果此属性为 null
,则显示标准上下文菜单。如果此属性不为 null
,则显示链接上下文菜单,并对指定的 URL 执行操作。
如果指定了 link
,则将忽略 clipboardMenu
属性。
默认值为 null
。
实现
public function get link():URLRequest
public function set link(value:URLRequest):void
numItems | 属性 |
ContextMenu | () | 构造函数 |
public function ContextMenu()
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
创建 ContextMenu 对象。
相关 API 元素
addItemAt | () | 方法 |
override public function addItemAt(item:NativeMenuItem, index:int):NativeMenuItem
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
在菜单底部添加一个菜单项。
创建上下文菜单时,可以添加 NativeMenuItem 或 ContextMenuItem 对象。但是,建议在上下文菜单中仅使用一种类型的对象,以使菜单中的所有项都具有相同的属性。
参数
item:NativeMenuItem — 要在菜单底部添加的项。
| |
index:int |
NativeMenuItem |
引发
ArgumentError — 如果 item 为 null 。
| |
ArgumentError — 如果 item 为其他菜单的成员。
|
clone | () | 方法 |
override public function clone():NativeMenu
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
创建指定 ContextMenu 对象的副本。此副本继承了原始菜单对象的所有属性。
返回NativeMenu — 包含原始菜单对象所有属性的 ContextMenu 对象。
|
containsItem | () | 方法 |
override public function containsItem(item:NativeMenuItem):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
报告此菜单是否包含指定的菜单项。
参数
item:NativeMenuItem — 要查找的项目。
|
Boolean — 如果 item 位于此菜单中,则为 true 。
|
display | () | 方法 |
getItemAt | () | 方法 |
override public function getItemAt(index:int):NativeMenuItem
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
获取指定索引处的菜单项。
参数
index:int — 要返回的项目的位置(从 0 开始)。
|
NativeMenuItem — 菜单中指定位置处的项目。
|
引发
RangeError — 如果 index 位于此菜单的 items 数组的范围以外。
|
getItemIndex | () | 方法 |
override public function getItemIndex(item:NativeMenuItem):int
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
获取指定项目的位置。
参数
item:NativeMenuItem — 要查找的 NativeMenuItem 对象。
|
int — 此菜单中指定项目的位置(从零开始),如果项目不在此菜单中,为 -1 。
|
hideBuiltInItems | () | 方法 |
public function hideBuiltInItems():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
隐藏指定的 ContextMenu 对象中的所有内置菜单项(“设置”除外)。如果 Flash Player 的调试器版本正在运行,则会显示“调试”菜单项,尽管对于未启用远程调试功能的 SWF 文件该菜单项会变暗。
此方法仅隐藏标准上下文菜单中显示的菜单项;它不影响编辑菜单和错误菜单中显示的菜单项。
通过将 my_cm
.builtInItems
的所有布尔成员设置为 false
可使此方法起作用。可以有选择地显示内置菜单项,方法是将它在 my_cm
.builtInItems
中的对应成员设置为 true
。
注意:在 AIR 中,上下文菜单没有内置项。调用此方法将无效。
相关 API 元素
removeAllItems | () | 方法 |
removeItemAt | () | 方法 |
override public function removeItemAt(index:int):NativeMenuItem
运行时版本: | AIR 1.0 |
删除并返回指定索引处的菜单项。
参数
index:int — 要删除的项目的位置(从 0 开始)。
|
NativeMenuItem — 已删除的 NativeMenuItem 对象。
|
menuSelect | 事件 |
flash.events.ContextMenuEvent
属性 ContextMenuEvent.type =
flash.events.ContextMenuEvent.MENU_SELECT
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
在用户首次生成上下文菜单但尚未显示上下文菜单内容时调度。这将允许您的程序在显示菜单之前修改上下文菜单项集。用户通过右键单击指针设备来生成上下文菜单。
定义menuSelect
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | false |
cancelable | false ;没有要取消的默认行为。 |
contextMenuOwner | 菜单附加到的显示列表对象。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
mouseTarget | 用户右键单击以显示上下文菜单的显示列表对象。 |
target | 将要显示的 ContextMenu 对象。target 不一定是显示列表中注册此事件侦听器的对象。请使用 currentTarget 属性来访问显示列表中当前正在处理此事件的对象。 |
ContextMenuExample
类从舞台中删除默认上下文菜单项,并添加一个新的菜单项,如果单击该菜单项,将可更改舞台上正方形的颜色。这是由以下步骤完成的:
- 声明
myContextMenu
属性,然后将其赋给新的 ContextMenu 对象,并声明 Sprite 类型的redRectangle
属性。 - 调用
removeDefaultItems()
方法,该方法将删除所有内置的上下文菜单项(“打印”除外)。 - 调用
addCustomMenuItems()
方法,该方法使用数组的push()
方法将称为Red to Black
菜单选择的菜单项放入defaultItems
数组。将menuItemSelect
事件侦听器添加到 ContextMenuItem 对象中,关联的方法名为menuItemSelectHandler()
。当访问上下文菜单并选择Red to Black
时,此方法使用trace()
输出一些语句。同时,红色正方形被删除并替换为一个黑色正方形。 - 添加类型
menuSelect
的事件侦听器以及关联的方法menuSelectHandler
,该方法在每次打开上下文菜单中的项时只使用trace()
输出三个语句。 - 然后,
addChildren()
将绘制一个红色正方形并将其添加到显示列表,该红色正方形将立即显示在列表中。 - 最后,
myContextMenu
赋给redRectangle
sprite 的上下文菜单,以便仅当鼠标移动到该正方形上方时才显示自定义上下文菜单。
package { import flash.ui.ContextMenu; import flash.ui.ContextMenuItem; import flash.ui.ContextMenuBuiltInItems; import flash.events.ContextMenuEvent; import flash.display.Sprite; import flash.display.Shape; import flash.text.TextField; public class ContextMenuExample extends Sprite { private var myContextMenu:ContextMenu; private var menuLabel:String = "Reverse Colors"; private var textLabel:String = "Right Click"; private var redRectangle:Sprite; private var label:TextField; private var size:uint = 100; private var black:uint = 0x000000; private var red:uint = 0xFF0000; public function ContextMenuExample() { myContextMenu = new ContextMenu(); removeDefaultItems(); addCustomMenuItems(); myContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler); addChildren(); redRectangle.contextMenu = myContextMenu; } private function addChildren():void { redRectangle = new Sprite(); redRectangle.graphics.beginFill(red); redRectangle.graphics.drawRect(0, 0, size, size); addChild(redRectangle); redRectangle.x = size; redRectangle.y = size; label = createLabel(); redRectangle.addChild(label); } private function removeDefaultItems():void { myContextMenu.hideBuiltInItems(); var defaultItems:ContextMenuBuiltInItems = myContextMenu.builtInItems; defaultItems.print = true; } private function addCustomMenuItems():void { var item:ContextMenuItem = new ContextMenuItem(menuLabel); myContextMenu.customItems.push(item); item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler); } private function menuSelectHandler(event:ContextMenuEvent):void { trace("menuSelectHandler: " + event); } private function menuItemSelectHandler(event:ContextMenuEvent):void { trace("menuItemSelectHandler: " + event); var textColor:uint = (label.textColor == black) ? red : black; var bgColor:uint = (label.textColor == black) ? black : red; redRectangle.graphics.clear(); redRectangle.graphics.beginFill(bgColor); redRectangle.graphics.drawRect(0, 0, size, size); label.textColor = textColor; } private function createLabel():TextField { var txtField:TextField = new TextField(); txtField.text = textLabel; return txtField; } } }
Tue Jun 12 2018, 11:04 AM Z