菜單資源定義瞭應用程序的菜單(選項菜單、內容菜單或子菜單),這些菜單能夠使用MenuInflater對象來裝載。
文件位置(FILE LOCATION):
res/menu/filename.xml
文件名被用作資源ID。
被編譯資源的數據類型(COMPILED RESOURCE DATATYPE):
資源指向一個Menu(或其子類)對象。
資源引用(RESOURCE REFERENCE):
在Java代碼中:R.menu.filename
在XML中:@[package:]menu.filename
語法(SYNTAX):
<?xml version="1.0" encoding="utf-8"?>
<menuxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:id="@[+][package:]id/resource_name"
android:title="string"
android:titleCondensed="string"
android:icon="@[package:]drawable/drawable_resource_name"
android:onClick="method name"
android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
android:actionLayout="@[package:]layout/layout_resource_name"
android:actionViewClass="class name"
android:actionProviderClass="class name"
android:alphabeticShortcut="string"
android:numericShortcut="string"
android:checkable=["true" | "false"]
android:visible=["true" | "false"]
android:enabled=["true" | "false"]
android:menuCategory=["container" | "system" | "secondary" | "alternative"]
android:orderInCategory="integer"/>
<groupandroid:id="@[+][package:]id/resource name"
android:checkableBehavior=["none" | "all" | "single"]
android:visible=["true" | "false"]
android:enabled=["true" | "false"]
android:menuCategory=["container" | "system" | "secondary" | "alternative"]
android:orderInCategory="integer">
<item/>
</group>
<item>
<menu>
<item/>
</menu>
</item>
</menu>
元素(ELEMENTS):
<menu>
必須的。它必須是根節點,其中要包含<item>、<group>元素。
屬性(ATTRIBUTES):
xmlns:android
它定義瞭XML的命名空間,必須是:http://schemas.android.com/apk/res/android
<item>
它定義一個菜單項,可以包含一個<menu>元素作為子菜單。它必須是<menu>、<group>元素的子元素。
屬性(ATTRIBUTES):
android:id
定義資源ID,它是個唯一值,使用“@+id/name”格式可以給這個菜單項創建一個新的資源ID,“+”號指示要創建一個新的ID。
android:title
字符串資源,它用字符串資源或原始的字符串來定義菜單的標題。
android:titleCondensed
字符串資源。它用字符串資源或原始的字符串來定義一個簡要的標題,以便在普通的標題太長時來使用。
android:icon
可繪制資源,它定義瞭一個菜單項所要使用的圖標。
android:onClick
方法名。在這個菜單項被點擊時,會調用這個方法。在Activity中,這個方法必須用public關鍵字來聲明,並且隻接受一個MenuItem對象,這個對象指明瞭被點擊的菜單項。這個方法會優先標準的回調方法:onOptionsItemSelected()。
警告:如果要使用ProGuard(或類似的工具)來混淆代碼,就要確保不要重名這個屬性所指定的方法,因為這樣能夠破壞功能。
這個屬性在API級別11中被引入。
android:showAsAction
關鍵詞。它定義這個項目作為操作欄中的操作項的顯示時機和方式。隻用Activity包含瞭一個ActionBar對象時,菜單項才能夠作為操作項來顯示。這個屬性在API級別11中被引入,有效值如下:
值 | 說明 |
ifRoom | 如果有針對這個項目的空間,則隻會把它放到操作欄中 |
withText | 操作項也要包含文本(通過android:title屬性來定義的)。可以把這個值與其他的Flag設置放到一起,通過管道符“|”來分離它們。 |
never | 這個項目不會放到操作欄中 |
always | 始終包這個項目放到操作欄中。要避免使用這個設置,除非在操作欄中始終顯示這個項目是非常關鍵的。設置多個項目作為始終顯示的操作項會導致操作欄中其他的UI溢出。 |
icollapseActiionView | 它定義瞭跟這個操作項關聯的可折疊的操作View對象(用android:actionViewLayout來聲明)。這個關鍵詞在API級別14中被引入。 |
這個屬性在API級別11中被引入。
android:actionViewLayout
它引用一個佈局資源,這個佈局要用於操作窗口。更多的信息請參照“操作欄”開發指南。這個屬性在API級別11中被引入。
android:actionViewClass
類名。它定義瞭操作窗口要使用的View對象的完整的類名。例如,“android.widget.SearchView”說明操作窗口要使用的SearchView類。
警告:如果要使用ProGuard(或類似的工具)來混淆代碼,就要確保不要重名這個屬性所指定的方法,因為這樣能夠破壞功能。
這個屬性在API級別11中被引入。
android:actionProviderClass
類名,它是操作項目所使用的ActionProvider類的完整的類名。例如,“android.widget.ShareActionProvider”說明要使用ShareActionProvider類。
警告:如果要使用ProGuard(或類似的工具)來混淆代碼,就要確保不要重名這個屬性所指定的方法,因為這樣能夠破壞功能。
這個屬性在API級別14中被引入。
android:alphabeticShortcut
字符,定義一個字符快捷鍵
android:numericShortcut
數字值,定義一個數字快捷鍵
android:checkable
佈爾值,如果菜單項是可以復選的,那麼就設置為true。
android:checked
佈爾值,如果復選菜單項默認是被選擇的,那麼就設置為true。
android:visible
佈爾值,如果菜單項默認是可見的,那麼就設置為true。
android:enabled
佈爾值,如果菜單項目默認是可用的,那麼就設置為true。
android:menuCategory
關鍵詞。它的值對應瞭定義菜單項優先級的CATEGORE_*常量,有效值如下:
值 | 說明 |
container | 菜單項是容器的一部分 |
system | 菜單項是由系統提供的。 |
secondary | 提供給用戶的輔助選擇的菜單項(很少使用) |
alternative | 基於當前顯示的數據來選擇操作的菜單項。 |
android:orderInCategory
整數值,它定義菜單項在菜單組中的重要性的順序。
<group>
它定義瞭一個菜單組(它是一個具有共同特征的菜單項的組合,如菜單項的可見性、可用性或可復選性)。它要包含多個<item>元素,而且必須是<menu>元素的子元素。
屬性(ATTRIBUTES):
android:id
資源ID。它是資源的唯一標識。使用“@+id/name”格式給菜單項創建一個新的資源ID。“+”號指示應該給這個元素創建一個新的資源ID。
android:checkableBeharior
關鍵詞。針對菜單組的可復選行為的類型。有效值如下:
值 | 說明 |
none | 沒有可復選性 |
all | 組內的所有的項目都被復選(使用復選框) |
single | 僅有一個項目能夠被復選(使用單選按鈕) |
android:visible
佈爾值,如果菜單組是可見的,就設置為true。
android:enabled
佈爾值,如果菜單組是可用的,就設置為true。
android:menuCategory
關鍵詞。它的值對應瞭Menu類的CATEGORY_*常量,定義瞭菜單組的優先級。有效值如下:
值 | 說明 |
container | 菜單組是容器的一部分 |
system | 菜單組是由系統提供的。 |
secondary | 提供給用戶的輔助選擇的菜單組(很少使用) |
alternative | 基於當前顯示的數據來選擇操作的菜單組。 |
android:orderInCategory
整數值,它定義瞭分類中菜單項目的默認順序。
例子(EXAMPLE):
XML文件被保存在res/menu/example_menu.xml中:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/item1"
android:title="@string/item1"
android:icon="@drawable/group_item1_icon"
android:showAsAction="ifRoom|withText"/>
<group android:id="@+id/group">
<item android:id="@+id/group_item1"
android:onClick="onGroupItemClick"
android:title="@string/group_item1"
android:icon="@drawable/group_item1_icon" />
<item android:id="@+id/group_item2"
android:onClick="onGroupItemClick"
android:title="@string/group_item2"
android:icon="@drawable/group_item2_icon" />
</group>
<item android:id="@+id/submenu"
android:title="@string/submenu_title"
android:showAsAction="ifRoom|withText" >
<menu>
<item android:id="@+id/submenu_item1"
android:title="@string/submenu_item1" />
</menu>
</item>
</menu>
下列代碼在onCreateOptionMenu(Menu)回調中來加載菜單,並且也給其中的兩個菜單項聲明瞭on-click回調方法。
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.example_menu, menu);
return true;
}
public void onGroupItemClick(MenuItem item) {
// One of the group items (using the onClick attribute) was clicked
// The item parameter passed here indicates which item it is
// All other menu item clicks are handled by onOptionsItemSelected()
}
註意:android:showAsAction屬性隻在Android3.0以後的版本中有效。
摘自 FireOfStar的專欄