Android系統中有三種菜單-----Contex Menus ,情境菜單:不支持菜單快捷鍵和圖標。 Options Menus ,選項菜單:支持圖標,但不支持菜單項選中標記。 Sub menus ,子菜單,不支持圖標,不能再有子菜單。
OptionsMenus:通過菜單快捷鍵觸發,由Activity的onCreateOptionsMenu(Menu)方法創建。
ContexMenus:由Activity的onCreateContextMenu(ContextMenu, View ,ContextMenuInfo)創建,創建該Menu必須對指定的View進行註冊,方法是:registerForContextMenu(view)。
SubMenus:以上兩種Menu都可以嵌入子菜單,當時子菜單中不能嵌入子菜單
下面主要是介紹解析指定XML成Menu對象
MenuInflater:用於將xml解析成Menu工具類,通過Activity的getMenuInflater()方法可以過得該對象:
MenuInflater inflater = getMenuInflater();
讓後通過該對象解析指定的對象
inflater.inflate(int,Menu);
int:表示xml文件的資源id
Menu:表示將xml解析成的Menu對象,xml文件中的元素或者subMenu都被添加到該Menu中去。
Menu元素監聽
OptionMenu菜單:onOptionsItemSelected(MenuItem)
ContextMenus菜單:onContextItemSelected(MenuItem),另外也可以通過重寫View的onCreateContextMenu方法來註冊該View的Menu事件
其中MenuItem表示用戶選中的菜單的元素,可以通過MenuItem的Id來辨別每個Item的操作事件,也可以通過Item的GroupID來確定操作事件。
例如:
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.jump:
Toast.makeText(this, "Jump up in the air!", Toast.LENGTH_SHORT).show();
return true;
}
}
Menu(主要方法)
在Xml文件中定義Menu
Menu的xml文件一定要放在res/menu目錄下面
Xml文件由menu標籤、group標籤、Item標籤組成
Menu:xml文件的根目錄
Group:定義該menu的group屬性
Item:定義該menu中item的屬性
android:id:表示該group和item的id號
android:checkableBehavior:表示在group下面的item可選的元素
single:表示單一選擇
all:表示所有元素都被選擇
none:表示沒有元素被選擇
android:visible:表示group/item是否可見
android:enabled:表示group/item是否被激活
android:title:Item的主題內容
android:icon:表示Item的圖像
android:checked:表示該item被選
android:alphabeticShortcut/android:numericShortcut:表示item的快捷鍵設置、
如下代碼:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/group"
android:checkableBehavior="single"
android:visible="true"
android:enabled="true"
>
<item android:id="@+id/jump"
android:title="@string/jump"
android:alphabeticShortcut="s"
/>
<item android:id="@+id/dive"
android:title="@string/dive" />
</group>
</menu>
<group android:id="@+id/group"
android:checkableBehavior="single"
android:visible="true"
android:enabled="true"
>
<item android:id="@+id/jump"
android:title="@string/jump"
android:alphabeticShortcut="s"
/>
<item android:id="@+id/dive"
android:title="@string/dive" />
</group>
</menu>