菜單是Activity的一個重要組成部分。它為使用者操作提供了很爽的途徑。Android提供了一個簡單的架構來向程式中添加標準菜單 .
共有三種菜單:
選項菜單
一個activity的功能表項目們的主要集合。當你按MENU按鈕時(硬體上的)就會出現。如果你的程式跑在 Android 3.0或以上,你可以通過把功能表項目作為 "action items"直接放在Actiion Bar上來提供快速選擇能力。
快顯功能表
一列浮動的功能表項目們,當使用者對一個註冊了快顯功能表的View按住不放時就會出現。
子功能表
也是一列浮動的功能表項目們,當使用者點擊一個包含嵌入菜單的功能表項目時出現。
本文檔闡明怎樣建立各類型的菜單,怎樣使用XML來定義菜單的內容以及如何在Activity中定義回呼函數來響應功能表項目。
建立一個菜單資源
你需要在一個XML 菜單資源中定義一個菜單而不是在代碼中,然後在代碼中inflate這個菜單資源。使用菜單資源來定義菜單是一個很佳的做法,因為這樣可以使介面與代碼分離。並且在XML中更容易設計你的菜單。
要建立一個菜單資源,先在你項目的res/menu/下建立一個XML檔案,然後用以下元素建立菜單:
<menu>
定義一個菜單,它是功能表項目的容器。 <menu>必須是檔案的根節點,其內部可包含一個或多個<item>和<group> 元素。
<item>
建立一個功能表項目。功能表項目中可以繼續包含<menu>元素,此時它就具有了子功能表。
<group>
一個可選的,不可見的,容納<item> 元素的容器。它使你能夠對功能表項目進行分類,從而使同類的功能表項目共用一些屬性,比如活動狀態,可見狀態等。請看 Menu groups節。
以下是一個菜單的例子,菜單名為 game_menu.xml:
<?xml version="1.0" encoding="utf-8"?><br /><menu xmlns:android="http://schemas.android.com/apk/res/android"><br /> <item android:id="@+id/new_game"<br /> android:icon="@drawable/ic_new_game"<br /> android:title="@string/new_game" /><br /> <item android:id="@+id/help"<br /> android:icon="@drawable/ic_help"<br /> android:title="@string/help" /><br /></menu>此例中定義了兩個功能表項目,每個包含屬性有:
android:id
一個資源ID來標誌功能表項目,當使用者選擇某個功能表項目時,程式可以用這個ID來識別這個功能表項目.
android:icon
引用一個drawable用於功能表項目的表徵圖。
android:title
引用一個字串用於功能表項目的標題。
還有很多可以在<item>中使用的屬性,還包含指定功能表項目如何在Action Bar中顯示的屬性。更多關於XML文法和菜單資源屬性的知識,請看 Menu Resource節。
Inflating 一個菜單資源
在 代碼中,使用方法 MenuInflater.inflate()你可以inflate(把一個XML資源轉換為程式中的對象)一個菜單資.例如,下面的代碼在回調方法 onCreateOptionsMenu()中把檔案 game_menu.xml inflate成一個菜單對象,從而作為這個Activity的選項菜單使用:
@Override<br />public boolean onCreateOptionsMenu(Menu menu) {<br /> MenuInflater inflater = getMenuInflater();<br /> inflater.inflate(R.menu.game_menu, menu);<br /> return true;<br />}方 法 getMenuInflater() 返回Activity的一個 MenuInflater ,使用這個對象,你可以調用 inflate(), 把菜單資源轉換為 菜單 對象.在這個例子中,菜單資源被inflate到方法onCreateOptionsMenu()的參數 Menu中. (這個方法在下一節會詳細討論).