Adobe Flash Builder 4 簡體中文正式版 Windows版點擊下載:http://g.csdn.net/5134151
Adobe Flash Builder 4 簡體中文正式版 Mac版點擊下載 :http://g.csdn.net/5134152
Adobe 在線課堂:http://adobev.csdn.net/zx/index.html
Adobe平臺技術(shù)峰會課程視頻:http://adobev.csdn.net/
呵呵!今天以前單位的小boss給我打電話問我關(guān)于flex應用程序添加右鍵菜單的問題,。說添加的菜單沒有顯示。以前我也沒有注意過?,F(xiàn)在總結(jié)一下,。我按照分類介紹一下。
1.flex 上下文菜單的原理
flex一共有三種默認的上下文菜單,,它們分別是標準菜單,,編輯菜單,和錯誤菜單三種,。
flex的標準菜單:當右鍵單擊flex組件上就會顯示Flash Player 提供的一些菜單內(nèi)容,。
flex的編輯菜單:當右鍵單擊flex可選擇可編輯的組件上時會顯示一個特殊的剪切板菜單例如(復制,粘貼,,剪切等),。
flex錯誤菜單:當flash加載swf失敗后會顯示錯誤菜單,。
標準菜單和編輯菜單是可以被自定義的但是錯誤菜單是不能有任何改變。所有繼承自InteractiveObject的對象都會包含一個 contextMenu屬性,。通常情況下contextMenu == null,。這時候在組件上單擊右鍵會顯示Flex framework初始化好的contextMenu。
2.flex菜單的結(jié)構(gòu)
flex的菜單按照組別進行了分類,,他會根據(jù)flash player版本,,是否顯示源代碼,標準菜單,,編輯菜單等等進行分類,。
1)View Source選項單獨分在一組里,你在頭信息里面設置了viewSourceURL就會顯示,。
2)自定義菜單項,,這里就是你自定義菜單的位置。
3)flash設置選項菜單,,像什么 Print, Zoom, Play, Loop,,質(zhì)量設置等就在這里,。
4)調(diào)試菜單選項。只有在flash player 是debug的時候顯示,。
5)flash的菜單,。這個菜單是必須要顯示的不能被自定義或隱藏。
咱們通常說的contextMenu.hideBuiltInItems();其實隱藏掉的是第三項,。也可以隱掉第三項里的某一個如:contextMenu.builtInItems.print=
false
;//隱掉打印菜單,。
3.自定義菜單。這個就有很多地方介紹了我這里也是簡單的說一下,。
創(chuàng)建自定義菜單
- 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);
- }
動態(tài)顯示自定一的菜單
- contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuHandler);
- function menuHandler(event:ContextMenuEvent) : void {
- customItem.visible = !customItem.visible;
- }
主要的有
1)自定義菜單不能超過15個,。
2)菜單內(nèi)容的長度不能超過100個字符(正常情況下真的很難達到)
3)不能設置子菜單
4)保留關(guān)鍵字不能用在自定義菜單里面-》小boss遇到的問題。如中英文的(Save, Copy, Paste, …)等,。
如果我非要用可以嗎?當然可以那么需要變通一下,。我們可以在保留關(guān)鍵字后面添加一個特殊的空格
customCopyItem =
new
ContextMenuItem(
"復制\u00A0"
);
哈哈最后借用一個別人的程序來結(jié)束。
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
- preloader="com.blogagic.preloader.BlogagicPreloader"
- width="450" height="160"
- paddingBottom="10" paddingTop="10"
- paddingLeft="10" paddingRight="10"
- backgroundColor="0xffffff"
- creationComplete="creationCompleteHandler(event)"
- viewSourceURL="srcview/index.html">
- <!--
- CustomizedContextMenu - Example of customizing the right click menu.
- Copyright (C) 2010 Blogagic (http:
- Licensed under the Creative Commons BSD Licence
- http:
- -->
- <mx:Script>
- <!--[CDATA[
- import mx.events.FlexEvent;
- import mx.controls.Alert;
- private var item1:ContextMenuItem;
- private var item2:ContextMenuItem;
- private var item3:ContextMenuItem;
- private var item4:ContextMenuItem;
- private var item5:ContextMenuItem;
-
- private function creationCompleteHandler(event:FlexEvent):void {
- customizeContextMenu();
- }
-
-
-
-
-
- private function customizeContextMenu():void
- {
-
-
-
-
-
-
- if (!contextMenu) {
- contextMenu = new ContextMenu();
- }
-
-
-
-
- contextMenu.hideBuiltInItems();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- item1 = new ContextMenuItem("Customized item", true);
- item2 = new ContextMenuItem("Enable/Disable customized menu entry", true);
- item3 = new ContextMenuItem("Visible/Invisible customized menu entry");
- item4 = new ContextMenuItem("Copy\u00A0");
- item5 = new ContextMenuItem("More Flex tutorials on Blogagic", true);
-
-
- item1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler);
- item2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler);
- item3.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler);
- item4.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler);
- item5.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemHandler);
-
-
- contextMenu.customItems.push(item1);
- contextMenu.customItems.push(item2);
- contextMenu.customItems.push(item3);
- contextMenu.customItems.push(item4);
- contextMenu.customItems.push(item5);
-
-
- contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler);
- }
-
-
-
- private function menuSelectHandler(event:ContextMenuEvent):void {
-
- item2.enabled = !item2.enabled;
- item3.visible = !item3.visible;
- }
-
-
- private function menuItemHandler(event:ContextMenuEvent):void {
- switch (event.target) {
- case item1:
- Alert.show("Customized menu item selected.", event.currentTarget.caption);
- break;
- case item2:
- Alert.show("This menu entry enablement changes each time the menu is displayed.", event.currentTarget.caption);
- break;
- case item3:
- Alert.show("This menu entry visibility changes each time the menu is displayed.", event.currentTarget.caption);
- break;
- case item4:
- Alert.show("Add \\u00A0 to your entry label to define entries using reserved keywords as Copy.", event.currentTarget.caption);
- break;
- case item5:
- navigateToURL(new URLRequest("http://"), "_self");
- break;
- }
- }
-
- private function blogagicHandler():void {
- navigateToURL(new URLRequest("http://"), "_self");
- }
- ]]-->
- </mx:Script>
-
- <mx:TextArea x="10" y="9" width="430" height="86" wordWrap="true" editable="false">
- <mx:text>
- Right click to open the customized Context Menu.
- Select text here and right click to see the additional clipboard menu items.
- </mx:text>
- </mx:TextArea>
- <mx:LinkButton x="298" y="128" label="Proposed by Blogagic" click="blogagicHandler()"/>
-
- </mx:Application>