2025-02-17

菜單資源定義瞭應用程序的菜單(選項菜單、內容菜單或子菜單),這些菜單能夠使用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的專欄

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *