菜單特性Menu Featuresandroid
下面是適用於大多數菜單項的一些其餘的特性。瀏覽器
菜單組Menu groupsapp
當往菜單中添加新項時,你能夠選擇把它包含在一個組中。一個菜單組是一些能夠共享某些特徵的菜單項的集合,好比它們是否可見,是否可用,或者能否複選(checkable)。ui
一個組由一個整數定義(或者一個XML裏的資源ID)。當咱們使用接受一個groupId參數的add()方法,好比add(int, int, int, int)添加項時,它將被添加到組中。this
你能夠經過setGroupVisible()顯示或隱藏菜單組;經過啓用或禁用這個組;以及經過setGroupCheckable()設置菜單項是否能夠複選。.net
可複選菜單項Checkable menu itemsblog
任何菜單項能夠被用來表示選項開關的接口。這能夠經過一個checkbox來指示一個單獨的選項,或者經過一組單選按鈕來表示互斥選項。(查看右邊的截屏)。接口
注意: 在圖標菜單中的菜單項不能顯示覆選框或單選按鈕。若是你選擇讓圖標按鈕中的菜單項變成可複選,那你必須在開關狀態變化時自動經過切換圖標和文原本指示這個狀態。ci
要讓一個單獨的項變成可複選,使用 setCheckable() 方法,以下:資源
menu.add(0, VIBRATE_SETTING_ID, 0, "Vibrate") .setCheckable(true);這將爲這個菜單項顯示一個複選框(除非這是個圖標菜單)。當這個item被選中時,一般onOptionsItemSelected()會被調用。你應該在這裏設置複選框狀態。你能夠用isChecked()來查詢這個菜單項的當前狀態和用setChecked()來設置複選狀態。就像下面同樣:
switch (item.getItemId()) {case VIBRATE_SETTING_ID: if (item.isChecked()) item.setChecked(false); else item.setChecked(true); return true;...}爲了建立一組互斥的單選按鈕,只要簡單的爲每一個菜單項分配相同的group ID並調用setGroupCheckable()。在這個例子裏,你不須要爲每一個菜單項調用setCheckable()方法,由於這個組被總體上設置爲可複選。下面是在一個子菜單中建立兩個互斥選項的例子:
SubMenu subMenu = menu.addSubMenu("Color");subMenu.add(COLOR_MENU_GROUP, COLOR_RED_ID, 0, "Red");subMenu.add(COLOR_MENU_GROUP, COLOR_BLUE_ID, 0, "Blue");subMenu.setGroupCheckable(COLOR_MENU_GROUP, true, true);在setGroupCheckable() 方法裏,第一個參數是咱們想設置爲可複選的group ID。第二個參數表示是否設置爲可複選。最後一個參數表明這些菜單項是否互斥(若是設置爲false,則全部的菜單項將會是複選框而不是單選按鈕。當這個組設置爲互斥時(單選按鈕),每當一個新的項被選中時,全部其它的項的選擇會自動被清除。
注意: 可複選菜單項傾向於基於每次會話使用,而不保存到設備中。(例如,地圖應用程序中的Map mode 設置並不會被保存-截屏如上)。若是有一些應用程序設置你須要爲用戶保存它,那你應該使用首選項Preferences來保存數據,而經過一個PreferenceActivity來管理它們。
快捷鍵Shortcut keys
能夠爲菜單項添加字母或數字快捷鍵,setAlphabeticShortcut(char)方法(設置字母快捷鍵),setNumericShortcut(int)方法(設置數字快捷鍵),或者 setShortcut(char,int) (同時設置字母和數字)。非大小寫敏感,好比:
menu.add(0, MENU_QUIT, 0, "Quit") .setAlphabeticShortcut('q');如今,當菜單打開時(或者按住菜單鍵),按」q」鍵將選擇該菜單項。
這個快捷鍵將以菜單項的提示信息而顯示在菜單項名稱的下面(除了圖標菜單項)。
注意: 快捷鍵不能添加進一個上下文菜單項中。
菜單項意圖Menu item intents
若是你已經閱讀過應用程序基礎Application Fundamentals,那麼你應該多少知道一點Android意圖。它容許程序互相綁定,分享信息,以及合做執行用戶任務。就像你的應用程序能夠發送一個意圖來啓動瀏覽器,郵件客戶端或者另一個活動同樣,你能夠從菜單中執行這樣的動做。有兩種途徑來作這件事:定義一個意圖而後分配給一個單獨的菜單項,或者定義一個意圖並容許Android查找設備上的活動而後動態的爲每一個符合意圖標準的活動添加一個菜單項。
請閱讀意圖和意圖過濾器章節,以獲取更多關於意圖建立和應用程序提供服務方面的信息。
爲一個單獨的菜單項設置一個意圖Set an intent for a single menu item
若是你想提供一個具體的菜單項來啓動一個新的活動,那麼你能夠經過setIntent()方法具體地爲這個菜單項定義一個意圖。
好比,在onCreateOptionsMenu() 方法裏,你能夠用一個意圖定義一個新菜單項以下:
MenuItem menuItem = menu.add(0, PHOTO_PICKER_ID, 0, "Select Photo");menuItem.setIntent(new Intent(this, PhotoPicker.class));當這個菜單項被選中時,Android將自動啓動這個活動。
注意: 這並不會給你的活動返回一個結果。若是你但願返回一個結果,那麼不要使用setIntent()。相反,和一般狀況同樣在onOptionsMenuItemSelected() or onContextMenuItemSelected() 回調中處理並調用startActivityForResult().
動態添加意圖Dynamically add intents
若是有潛在的多個活動和你的當前活動或所選擇菜單項相關,那麼這個應用程序能夠動態添加菜單項來執行其餘的服務。
在菜單建立過程當中,定義一個意圖,使用Intent.ALTERNATIVE_CATEGORY和/或 Intent.SELECTED_ALTERNATIVE類別,當前選擇(若是有的話)的MIME類型,以及其餘需求,和你打開一個新活動時想要知足一個意圖過濾器同樣。而後調用addIntentOptions() 來讓Android查找任何知足那些需求的服務併爲你添加它們到菜單中。若是已安裝的程序沒有知足這個意圖的,那麼將不會有額外的菜單項被添加。
注意: SELECTED_ALTERNATIVE 是用來處理屏幕當前選中元素的。因此,它應該僅當在onCreateContextMenu()或 onPrepareOptionsMenu()裏面建立菜單項時使用, 後者每次打開選項菜單時會被調用。
下面是一個說明應用程序如何搜索附加服務來顯示在它的菜單中的例子。
public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); // Create an Intent that describes the requirements to fulfill, to be included // in our menu. The offering app must include a category value of Intent.CATEGORY_ALTERNATIVE. Intent intent = new Intent(null, getIntent().getData()); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); // Search for, and populate the menu with, acceptable offering applications. menu.addIntentOptions( thisClass.INTENT_OPTIONS, // Menu group 0, // Unique item ID (none) 0, // Order for the items (none) this.getComponentName(), // The current Activity name null, // Specific items to place first (none) intent, // Intent created above that describes our requirements 0, // Additional flags to control items (none) null); // Array of MenuItems that corrolate to specific items (none) return true;}對於每一個活動,若是其意圖過濾器匹配咱們所定義的那個意圖,則將會添加一個菜單項,使用這個意圖過濾器的android:label值做爲菜單項的文本。這個addIntentOptions() 方法也會返回所增長菜單項的數目。
請同時注意,當addIntentOptions() 被調用時,它將重寫第一個參數指定的全部菜單組裏的菜單項。
若是想把你的活動的服務提供給其餘應用程序菜單,那麼你只須要和一般狀況同樣定義一個意圖過濾器。只是須要確保在一個意圖過濾器的
要了解使用該技術的一個例子應用程序,可查看NotePad範例代碼。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/iefreer/archive/2009/09/21/4577124.aspx