文章出處

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android: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"/>

  

菜單資源文件必須放在res/menu目錄中。菜單資源文件必須使用<menu>標簽作為根節點。除了<menu>標簽外,還有另外兩個標簽用于設置菜單項和分組,這兩個標簽是<item>和<group>。

<menu>標簽沒有任何屬性,但可以嵌套在<item>標簽中,表示子菜單的形式。不過<item>標簽中不能再嵌入<item>標簽。

1.<item>標簽的屬性含義如下:

Id:表示菜單項的資源ID

menuCategory:同種菜單項的種類。該屬性可取4個值:Container、system、secondary和alternative。通過menuCategroy屬性可以控制菜單項的位置。例如將屬性設為system,表示該菜單項是系統菜單,應放在其他種類菜單項的后面。

orderInCategor:同種類菜單的排列順序。該屬性需要設置一個整數值。例如menuCategory屬性值都為system的3個菜單項(item1、item2和item3)。將這3個菜單項的orderInCategory屬性值設為3、2、1,那么item3會顯示在最前面,而item1會顯示在最后面。

title:菜單項標題(菜單項顯示的文本)

titleCondensed:菜單項的短標題。當菜單項標題太長時會顯示該屬性值

icon:菜單項圖標資源ID

showAsAction:

  1.alaways:這個值會使菜單項一直顯示在ActionBar上。

  2.ifRoom:如果有足夠的空間,這個值會使菜單顯示在ActionBar上。

  3.never:這個值菜單永遠不會出現在ActionBar是。

  4.withText:這個值使菜單和它的圖標,菜單文本一起顯示。

alphabeticShortcut:菜單項的字母快捷鍵

numericShortcut:菜單項的數字快捷鍵

checkable:表示菜單項是否帶復選框。該屬性可設計為true或false

checked:如果菜單項帶復選框(checkable屬性為true),該屬性表示復選框默認狀態是否被選中。可設置的值為true或false

visible:菜單項默認狀態是否可視

enable:菜單項默認狀態是否被激活

2.<group>標簽的屬性含義如下:

id:表示菜單組的ID

menuCategory:與<item>標簽的同名屬性含義相同。只是作用域為菜單組

orderInCategory:與<item>標簽的同名屬性含義相同。只是作用域為菜單組

checkableBehavior:設置該組所有菜單項上顯示的選擇組件(CheckBox或Radio Button)。如果將該屬性值設為all,顯示CheckBox組件;如果設為single,顯示Radio Button組件;如果設為none,顯示正常的菜單項(不顯示任何選擇組件)。要注意的是,Android SDK官方文檔在解釋該屬性時有一個筆誤,原文是:

Whether the items are checkable. Valid values: none, all(exclusive/radiobuttons), single(non-exclusive/checkboxes).

相反了,正確應該是

all(non-exclusive/checkboxes),single(exclusive/radiobuttons).

visible:表示當前組中所有菜單項是否顯示。該屬性可設置的值是true或false

enable:表示當前組中所有菜單項是否被激活。該屬性可設置的值是true或false

3.具體使用

在代碼中使用

public boolenonCreateOptionsMenu(Menu menu){

MenuInflatemenuInflate = getMenuInflate();

menuInflate.inflate(R.menu.option_menu,menu);

returntrue;

}

二、使用代碼定義Menu

public boolean onCreateOptionsMenu(Menu menu){  

// 方法一,用代碼構建   

 menu.add(Menu.NONE, Menu.NONE, 1, "菜單1");  

 menu.add(Menu.NONE, Menu.NONE, 2, "菜單2");  

 menu.add(Menu.NONE, Menu.NONE, 3, "菜單3");  

 menu.add(Menu.NONE, Menu.NONE, 4, "菜單4");  

menu.add(Menu.NONE, Menu.NONE, 5, "菜單5");  

menu.add(Menu.NONE, Menu.NONE, 6, "菜單6");  

return true;  

}  

三、菜單響應

重寫onOptionsItemSelected(MenuItem item)這個方法就可以做響應的操作了。

以布局的方式添加的MenuItem:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.first:
                
                break;
            case R.id.second:
                
                break;
        }
        return true;
    }

如果是以menu.add(int  groupId, int itemId, int order, CharSquence title)方式添加的MenuItem,case的后面寫itemId就行。

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()