編輯:關於Android編程
Android 的菜單機制,在 Android 3.0 之前和之後有很大的去別,Android 3.0 推出 ActionBar ,導航的 UI 交互有很大的變化,但菜單的邏輯和接口還是一樣的。這裡主要介紹下 Android 菜單創建、使用,後面介紹 ActionBar,SherlockActionBar 與 菜單的結合使用,自定義菜單的創建。
Android 菜單主要有4種:
OptionMenu
ContextMenu
PopMenu
SubMenu
下面先介紹下 OptionMenu ,分別使用 xml 文件和 JAVA 代碼創建 菜單。
1.OptionMenu
選項菜單,點擊 Menu 鍵時彈出,選中菜單項或者點擊其他區域,菜單消失。
optionMenu 的相關方法的實現在 Activity 中 ,相關的方法有:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.d(tag, onCreateOptionsMenu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
Log.d(tag, onPrepareOptionsMenu);
return super.onPrepareOptionsMenu(menu);
}
@Override
public void onOptionsMenuClosed(Menu menu) {
System.out.println(onOptionsMenuClosed);
Log.d(tag, onOptionsMenuClosed);
super.onOptionsMenuClosed(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_save:
Log.d(tag, action_save);
break;
case R.id.action_settings:
Log.d(tag, action_settings);
break;
case R.id.action_delete:
Log.d(tag, action_delete);
break;
case R.id.action_edit:
Log.d(tag, action_edit);
break;
}
return super.onOptionsItemSelected(item);
}
onCreateOptionMenu ,在 Activity 生命周期內 只執行一次,onPrepareOptionMenu每次打開菜單都會執行,菜單消失的時候執行onOptionsMenuClosed方法,菜單被選中時執行 onOptionsItemSelected 。
下面看下在 Android 2.3 系統上用 XML 創建的 OptionMenu ,具體效果圖如下。

第一張:4個菜單選項,沒有圖標
第二張:8個菜單項,有圖標
第三張:點擊更多,沒有圖標
同樣的代碼,如果 不兼容(最低版本>11) Android 3.0 之前的版本,在 Android4.4 上是什麼效果呢 ?
第一張:4個菜單選項,沒有圖標 ,只顯示出兩個,多了一個更多的標識
第二張:點擊更多菜單項
第三張:8個菜單項,有圖標,但是顯示出的菜單沒有文字,更多中菜單項只有文字
第四張:點擊更多,沒有圖標
下面看下具體的代碼
1. 編寫 menu.xml
android:orderInCategory 菜單項在 菜單中的位置
2. 在 Activity 中添加 菜單
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
Log.d(tag, onCreateOptionsMenu);
inflater.inflate(R.menu.main_icon, menu);
return super.onCreateOptionsMenu(menu);
}
3. 菜單事件的響應
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_save:
Log.d(tag, action_save);
break;
case R.id.action_settings:
Log.d(tag, action_settings);
break;
case R.id.action_delete:
Log.d(tag, action_delete);
break;
case R.id.action_edit:
Log.d(tag, action_edit);
break;
case R.id.action_search:
Log.d(tag, action_search);
break;
}
return super.onOptionsItemSelected(item);
}
這樣,就完成了菜單的創建、使用、響應。
Android 官方推薦使用 XML 創建菜單,同時也可以在 JAVA 代碼中創建 菜單。實現過程如下
a. 直接在 onCreateOptionsMenu() 方法中添加菜單項
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
//menu.add(int groupid,int itemid,int orderid,String title)方法參數
//add 方法返回一個 MenuItem 對象,可以添加圖標,調用 setIcon() 方法
Log.d(tag, onCreateOptionsMenu);
menu.add(0, Menu.FIRST+1, Menu.FIRST+1, menusStrings[0]).setIcon(android.R.drawable.ic_menu_add);
menu.add(0, Menu.FIRST+2, Menu.FIRST+2, menusStrings[1]).setIcon(android.R.drawable.ic_menu_agenda);
menu.add(0, Menu.FIRST+3, Menu.FIRST+3, menusStrings[2]).setIcon(android.R.drawable.ic_menu_call);
menu.add(0, Menu.FIRST+4, Menu.FIRST+4, menusStrings[3]).setIcon(android.R.drawable.ic_menu_close_clear_cancel);
menu.add(0, Menu.FIRST+5, Menu.FIRST+5, menusStrings[4]).setIcon(android.R.drawable.ic_menu_crop);
menu.add(0, Menu.FIRST+6, Menu.FIRST+6, menusStrings[5]).setIcon(android.R.drawable.ic_menu_upload);
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
b. 響應菜單選中事件
響應選中事件方式和上面一樣,就不再貼出代碼了~。
關於 OptionsMenu的 介紹就這些啦,大家有問題在評論交流啊
Android開發技巧之在a標簽或TextView控件中單擊鏈接彈出Activity(自定義動作)
在5.2.1節和5.2.2節介紹了<a>標簽以及TextView自動識別的特殊文本(網址、電話號、Email等),這些都可以通過單擊來觸發不同的動作。雖然這些
android源碼出現的@字符意義總結
(轉載請注明出處:http://blog.csdn.net/buptgshengod) 1.背景 在android源碼中我們能看到各種以@開頭的字符,他們大
Android如何在初始化的時候獲取加載的布局的寬高
在自定義ListView中,需要將下拉刷新的View在初始化的時候設置padding隱藏起來,這時就要在初始化的時候獲得要加載的布局View的高度。 private V
Android百日程序:GridView實現相冊效果
本章使用GridView控件來做一個相冊效果。 圖片效果如下: 響應點擊事件,點擊的時候提示是當前第幾章圖片,從左到右,從上到下。 點擊了第一張圖片,顯示了1. 步