- 在/res目錄下創建menu文件夾
- 在menu目錄下使用與menu相關的元素定義xml文件,文件名任意,android會自動為其生成資源ID。例如:R.menu.itemmenu對應menu目錄的itemmenu.xml資源文件
- 使用xml文件的資源ID,將xml文件中定義的菜單項添加到menu對象中去
- 響應菜單項時,使用每個菜單項對應的資源ID
(一)定義資源文件
在res目錄下創建menu文件夾,在menu下創建一個xml資源文件,我這里叫做main_menu.xml
編寫main_menu.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- group1 -->
<group android:id="@+id/group1">
<item android:id="@+id/mi1"
android:title="item1"/>
<item android:id="@+id/mi2"
android:title="item2"/>
</group>
<!-- group 2 -->
<group android:id="@+id/group2">
<item android:id="@+id/mi3"
android:title="item3"/>
<item android:id="@+id/mi4"
android:title="item4"/>
</group>
</menu>
這里簡單的添加了4個菜單項,並將其分為2組。item元素的android:title值可以引用values中的string資源。
(二)使用MenuInflater添加菜單項
MenuInflater在android中建立了從資源文件到對象的橋梁,MenuInflater即把菜單xml資源轉換為對象並添加到menu對象中,它可以通過activity的getMenuInflater()得到。我們在MainActivity中重寫onCreateOptionsMenu(...)方法。
@Override(三)響應菜單
publicboolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
returntrue;
}
最后重寫onOptionsItemSeleted(...)方法。
@Override
publicboolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.mi1:
// do sth
break;
case R.id.mi2:
// do sth
break;
case R.id.mi3:
// do sth
break;
case R.id.mi4:
// do sth
break;
}
return true;
}
這一步最大的體現了使用XML生成菜單的好處。android不僅為我們定義的xml文件生成了資源ID,同樣可以為group,menu item來自動生成ID(就像為布局中定義的view生成id那樣)。
至此,我們完成了一個簡單的“使用XML生成菜單”的demo,並從中體會到了使用資源文件的好處,因此這是android中創建菜單的推薦方式。實際上,我們在代碼中對菜單項或分組的操作都能在xml文件中完成,下面就簡單介紹一些比較常用的功能。
(五)更多菜單資源的功能
1.資源文件實現子菜單
子菜單通過在item元素中嵌套menu來實現。
<item android:title="系統設置">2.為菜單項添加圖標
<menu>
<item android:id="@+id/mi_display_setting"
android:title="顯示設置"/>
<item android:id="@+id/mi_network_setting"
android:title="網絡設置"/>
<!-- 別的菜單項 -->
</menu>
</item>
<item android:id="@+id/mi_exit"
android:title="退出"
android:icon="@drawable/exit"/>
3.設置菜單項的可選出現
使用android:checkableBehavior設置一組菜單項的可選策略,可選值為:none, all, single
<group android:id="..."使用android:checked設置特定菜單項
android:checkableBehavior="all">
<!-- 菜單項 -->
</group>
<item android:id="..."4.設置菜單項可用/不可用
android:title="sometitle"
android:checked="true"/>
<item android:id="..."
android:title="sometitle"
android:enabled="false"/>
5.設置菜單項可見/不可見
<item android:id="..."
android:title="sometitle"
android:visible="false"/>