flex右键菜单原理(解决flex应用程序添加右键菜单为什么没有显示)

呵呵!今天以前单位的小boss给我打电话问我关于flex应用程序添加右键菜单的问题。说添加的菜单没有显示。以前我也没有注意过。现在总结一下。我按照分类介绍一下。

1.flex 上下文菜单的原理

flex一共有三种默认的上下文菜单,它们分别是标准菜单,编辑菜单,和错误菜单三种。

flex的标准菜单:当右键单击flex组件上就会显示Flash Player 提供的一些菜单内容。

flex的编辑菜单:当右键单击flex可选择可编辑的组件上时会显示一个特殊的剪切板菜单例如(复制,粘贴,剪切等)。

flex错误菜单:当flash加载swf失败后会显示错误菜单。

标准菜单和编辑菜单是可以被自定义的但是错误菜单是不能有任何改变。所有继承自InteractiveObject的对象都会包含一个contextMenu属性。通常情况下contextMenu == null。这时候在组件上单击右键会显示Flex framework初始化好的contextMenu。

2.flex菜单的结构

flex的菜单按照组别进行了分类,他会根据flash player版本,是否显示源代码,标准菜单,编辑菜单等等进行分类。

1)View Source选项单独分在一组里,你在头信息里面设置了viewSourceURL就会显示。

2)自定义菜单项,这里就是你自定义菜单的位置。

3)flash设置选项菜单,像什么 Print, Zoom, Play, Loop,质量设置等就在这里。

4)调试菜单选项。只有在flash player 是debug的时候显示。

5)flash的菜单。这个菜单是必须要显示的不能被自定义或隐藏。

咱们通常说的contextMenu.hideBuiltInItems();其实隐藏掉的是第三项。也可以隐掉第三项里的某一个如:contextMenu.builtInItems.print=false;//隐掉打印菜单。

3.自定义菜单。这个就有很多地方介绍了我这里也是简单的说一下。

创建自定义菜单

 

var customItem:ContextMenuItem = new ContextMenuItem("自定义菜单"); contextMenu.customItems.push(customItem); 
给自定已菜单增加事件
var customItem:ContextMenuItem = new ContextMenuItem("自定义菜单"); contextMenu.customItems.push(customItem); customItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler); function menuItemHandler(event:ContextMenuEvent) : void{ Alert.show("你单击了自定义菜单 " + event.currentTarget.caption); } 
动态显示自定一的菜单
contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuHandler); function menuHandler(event:ContextMenuEvent) : void { customItem.visible = !customItem.visible; }  
最后就是flex菜单的限制,也就是我以前的小boss遇到的问题。可以参考 ContextMenuItem documentation.
主要的有
1)自定义菜单不能超过15个。
2)菜单内容的长度不能超过100个字符(正常情况下真的很难达到)
3)不能设置子菜单
4)保留关键字不能用在自定义菜单里面-》小boss遇到的问题。如中英文的(Save, Copy, Paste, …)等。
如果我非要用可以吗?当然可以那么需要变通一下。我们可以在保留关键字后面添加一个特殊的空格
customCopyItem = new ContextMenuItem( "复制/u00A0" );


哈哈最后借用一个别人的程序来结束。
Right click to open the customized Context Menu. Select text here and right click to see the additional clipboard menu items.  

 

你可能感兴趣的:(flex右键菜单原理(解决flex应用程序添加右键菜单为什么没有显示))