Android菜單操作之創(chuàng)建并響應(yīng)菜單
上一篇《學(xué)習(xí)理解Android菜單Menu操作》簡單介紹了一下Android的菜單,今天讓我們看一下如何通過代碼創(chuàng)建和響應(yīng)最常用的選項(xiàng)菜單(options menu)。
一、創(chuàng)建options menu
之前提到,Android的activity已經(jīng)為我們提前創(chuàng)建好了android.view.Menu對象,并提供了回調(diào)方法onCreateOptionsMenu(Menu menu)供我們初始化菜單的內(nèi)容。該方法只會在選項(xiàng)菜單第一次顯示的時(shí)候被執(zhí)行,如果你需要?jiǎng)討B(tài)改變選項(xiàng)菜單的內(nèi)容,請使用 onPrepareOptionsMenu(Menu)。
@Override
publicboolean onCreateOptionsMenu(Menu menu) {
// 調(diào)用父類方法來加入系統(tǒng)菜單
// 雖然目前android還沒有系統(tǒng)菜單,但是為了兼容到以后的版本,最好加上
super.onCreateOptionsMenu(menu);
// 添加菜單項(xiàng)(多種方式)
// 1.直接指定標(biāo)題
menu.add("菜單項(xiàng)1");
// 2.通過資源指定標(biāo)題
menu.add(R.string.menuitem2);
// 3.顯示指定菜單項(xiàng)的組號、ID、排序號、標(biāo)題
menu.add(
1, //組號
Menu.FIRST, //唯一的ID號
Menu.FIRST, //排序號
"菜單項(xiàng)3"); //標(biāo)題
// 如果希望顯示菜單,請返回true
returntrue;
}
上面的代碼演示了添加菜單項(xiàng)的3種方法,下面解釋下第三種方法add(int groupId, int itemId, int order, CharSequence title)。其中,第一個(gè)參數(shù)是組號,android中你可以給菜單分組,以便快速地操作同一組的菜單。第二個(gè)參數(shù)指定每個(gè)菜單項(xiàng)的唯一ID號,你可以自己指定,也可以讓系統(tǒng)來自動(dòng)分配,在響應(yīng)菜單時(shí)你需要通過ID號來判斷哪個(gè)菜單被點(diǎn)擊了。因此常規(guī)的做法是定義一些ID常量,但在android中有更好的方法,就是通過資源文件來引用,這個(gè)之后介紹。第三個(gè)參數(shù)代表菜單項(xiàng)顯示順序的編號,編號小的顯示在前面。
二、給菜單項(xiàng)分組
@Override
publicboolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// 添加4個(gè)菜單項(xiàng),分成2組
int group1 =1;
int gourp2 =2;
menu.add(group1, 1, 1, "item 1");
menu.add(group1, 2, 2, "item 2");
menu.add(gourp2, 3, 3, "item 3");
menu.add(gourp2, 4, 4, "item 4");
// 顯示菜單
returntrue;
}
你可以向上面這樣給菜單項(xiàng)分組,分組之后就能使用menu中提供的方法對組進(jìn)行操作了,如下:
menu.removeGroup(group1); //刪除一組菜單 menu.setGroupVisible(gourp2, visible); //設(shè)置一組菜單是否可見 menu.setGroupEnabled(gourp2, enabled); //設(shè)置一組菜單是否可點(diǎn) menu.setGroupCheckable(gourp2, checkable, exclusive); //設(shè)置一組菜單的勾選情況
三、響應(yīng)菜單項(xiàng)
android提供了多種響應(yīng)菜單項(xiàng)的方式,下面一一介紹
1、通過onOptionsItemSelected方法
使用的最多方法是重寫activity類的 onOptionsItemSelected(MenuItem)回調(diào)方法,每當(dāng)有菜單項(xiàng)被點(diǎn)擊時(shí),android就會調(diào)用該方法,并傳入被點(diǎn)擊菜單項(xiàng)。
@Override
publicboolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
//響應(yīng)每個(gè)菜單項(xiàng)(通過菜單項(xiàng)的ID)
case1:
// do something here
break;
case2:
// do something here
break;
case3:
// do something here
break;
case4:
// do something here
break;
default:
//對沒有處理的事件,交給父類來處理
returnsuper.onOptionsItemSelected(item);
}
//返回true表示處理完菜單項(xiàng)的事件,不需要將該事件繼續(xù)傳播下去了
returntrue;
}
以上代碼可作為使用onOptionsItemSelected方法響應(yīng)菜單的模板來使用,這里為了方便起見將菜單ID硬編碼在程序里,你可以使用常量或資源ID來使代碼更健壯。
2.使用監(jiān)聽器
雖然第一種方法是推薦使用的方法,android還是提供了類似java swing的監(jiān)聽器方式來響應(yīng)菜單。使用監(jiān)聽器的方式分為兩步:
//第一步:創(chuàng)建監(jiān)聽器類
class MyMenuItemClickListener implements OnMenuItemClickListener {
@Override
publicboolean onMenuItemClick(MenuItem item) {
// do something here...
returntrue; //finish handling
}
}
//第二步:為菜單項(xiàng)注冊監(jiān)聽器
menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());
android文檔對onMenuItemClick(MenuItem item)回調(diào)方法的說明是"Called when a menu item has been invoked. This is the first code that is executed; if it returns true, no other callbacks will be executed." 可見該方法先于onOptionsItemSelected執(zhí)行。
3.使用Intent響應(yīng)菜單
第3種方式是直接在MenuItem上調(diào)用setIntent(Intent intent)方法,這樣android會自動(dòng)在該菜單被點(diǎn)擊時(shí)調(diào)用 startActivity(Intent)。但是個(gè)人認(rèn)為與其這樣還不如直接在onOptionsItemSelected的case里手動(dòng)調(diào)用 startActivity(Intent)來的直觀。
結(jié)語
本文詳細(xì)介紹了如何創(chuàng)建和響應(yīng)選項(xiàng)菜單,下一篇《Android菜單操作之SubMenu和IconMenu》將繼續(xù)介紹子菜單和圖標(biāo)菜單的使用,大家繼續(xù)關(guān)注哦。
- android游戲載入的activity跳轉(zhuǎn)到游戲主菜單的activity具體實(shí)現(xiàn)
- Android使用onCreateOptionsMenu()創(chuàng)建菜單Menu的方法詳解
- android教程之使用popupwindow創(chuàng)建菜單示例
- 在Android中創(chuàng)建菜單項(xiàng)Menu以及獲取手機(jī)分辨率的解決方法
- 用Android MenuInflater創(chuàng)建菜單項(xiàng)的方法步驟
- Android編程實(shí)現(xiàn)為ListView創(chuàng)建上下文菜單(ContextMenu)的方法
- Android中選項(xiàng)菜單(OptionMenu)的創(chuàng)建方法
- Android創(chuàng)建Menu菜單實(shí)例
- Android中為activity創(chuàng)建菜單
相關(guān)文章
Android自定義實(shí)現(xiàn)BaseAdapter的普通實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Android自定義實(shí)現(xiàn)BaseAdapter的普通實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2016-08-08
Android跳轉(zhuǎn)系統(tǒng)設(shè)置Settings的各個(gè)界面詳解
系統(tǒng)設(shè)置Settings中定義的一些常用的各界面ACTION常量,下面這篇文章主要給大家介紹了關(guān)于Android跳轉(zhuǎn)系統(tǒng)設(shè)置Settings的各個(gè)界面,文中介紹非常詳細(xì),需要的朋友可以參考下2023-01-01
Android 簡單的實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼功能
這篇文章主要介紹了Android 簡單的實(shí)現(xiàn)滑塊拼圖驗(yàn)證碼功能,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下2021-03-03
Android官方的側(cè)滑控件DrawerLayout的示例代碼
這篇文章主要介紹了Android官方的側(cè)滑控件DrawerLayout的示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-09-09

