OptionsMenu
在android的SDK中options menu 是這樣解釋的:Options menus: The icon menus do not support item check marks and only show the item's condensed title. The expanded menus (only available if six or more menu items are visible, reached via the 'More' item in the icon menu) do not show item icons, and item check marks are discouraged.
具體的動作表現就是 在android手機上按 menu 鍵時顯示的菜單,點擊相應的菜單可以進行相應的操作。
使用步驟
Option menu的使用比較簡單,首先在res檔案夾下建立menu目錄,然後往裡面添加菜單的XML 檔案。
[html]
?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/settings" android:title="@string/settings_label"
android:icon="@android:drawable/ic_menu_preferences"
android:alphabeticShortcut="s">
</item>
</menu>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/settings" android:title="@string/settings_label"
android:icon="@android:drawable/ic_menu_preferences"
android:alphabeticShortcut="s">
</item>
</menu>item:每一個item對應一項菜單。
android:icon:用於指定菜單顯示的表徵圖。
android:title:菜單的標題,顯示在表徵圖下面。
android:alphabeticShortcut:菜單選擇的快速鍵。
關於Menu的更多屬性請查看SDK上的 Menu Resource。
第二步是在Activity裡重寫 onCreateOptionsMenu 方法,並通過MenuInflater 將剛才的xml資源轉化為Menu 執行個體。並顯示在Activity裡
[java]
/**
* 建立系統功能表,該菜單通過按下Menu鍵顯示
*/
@Override
publicboolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//通過MenuInflater將XML 執行個體化為 Menu Object
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
returntrue;
}
/**
* 建立系統功能表,該菜單通過按下Menu鍵顯示
*/
@Override
publicboolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//通過MenuInflater將XML 執行個體化為 Menu Object
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
returntrue;
}運行模擬器點擊Menu鍵,就可以看到菜單目錄的顯示了。但是此時點擊菜單並沒有任何反應,原因是我們還沒添加對應的處理事件。給menu添加處理事件需要重寫public boolean onOptionsItemSelected(MenuItem item)方法。
[java]
/**
* 菜單點擊事件
*/
@Override
publicboolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.about:
Logger.d("Displaying the about box");
// 顯示關於頁
displayAboutBox();
returntrue;
case R.id.help:
Logger.d("Displaying the help dialog");
// 顯示到幫帳頁
displayHelpDialog();
returntrue;
case R.id.settings:
Logger.d("Displaying the settings");
// 跳轉到配置頁
displaySettings();
returntrue;
case R.id.teams:
Logger.d("Displaying the team configuration");
// 跳轉到團隊配置頁
displayTeamConfiguration();
returntrue;
case R.id.quit:
Logger.d("Quitting");
// 退出程式
finish();
returntrue;
default:
Logger.e("Unknown menu item selected");
//返回False交由系統正常處理菜單,返回True則由本程式處理
returnfalse;
}
}
/**
* 菜單點擊事件
*/
@Override
publicboolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.about:
Logger.d("Displaying the about box");
// 顯示關於頁
displayAboutBox();
returntrue;
case R.id.help:
Logger.d("Displaying the help dialog");
// 顯示到幫帳頁
displayHelpDialog();
returntrue;
case R.id.settings:
Logger.d("Displaying the settings");
// 跳轉到配置頁
displaySettings();
returntrue;
case R.id.teams:
Logger.d("Displaying the team configuration");
// 跳轉到團隊配置頁
displayTeamConfiguration();
returntrue;
case R.id.quit:
Logger.d("Quitting");
// 退出程式
finish();
returntrue;
default:
Logger.e("Unknown menu item selected");
//返回False交由系統正常處理菜單,返回True則由本程式處理
returnfalse;
}
}根據MenuItem的 getItemId()擷取對應menu項的ID,這個id值對應xml中的 android:id。這樣菜單功能就完成實現了,建議將一些不常用的功能連結放到菜單中例如:about us 、help 等等,因為使用者可能不懂得如何使用菜單。