Android菜單詳解(二)——建立並響應選項菜單

來源:互聯網
上載者:User

上一篇《Android菜單詳解(一)——理解android中的menu》簡單介紹了一下Android的菜單,今天讓我們看一下如何通過代碼建立和響應最常用的選項菜單(options menu)。

建立options menu

之前提到,Android的activity已經為我們提前建立好了android.view.Menu對象,並提供了回調方法onCreateOptionsMenu(Menu menu)供我們初始化菜單的內容。該方法只會在選項菜單第一次顯示的時候被執行,如果你需要動態改變選項菜單的內容,請使用 onPrepareOptionsMenu(Menu)

 

@Override
publicboolean onCreateOptionsMenu(Menu menu) {
// 調用父類方法來加入系統功能表
// 雖然目前android還沒有系統功能表,但是為了相容到以後的版本,最好加上
super.onCreateOptionsMenu(menu);

// 添加功能表項目(多種方式)
// 1.直接指定標題
menu.add("功能表項目1");
// 2.通過資源指定標題
menu.add(R.string.menuitem2);
// 3.顯示指定功能表項目的組號、ID、排序號、標題
menu.add(
1, //組號
Menu.FIRST, //唯一的ID號
Menu.FIRST, //排序號
"功能表項目3"); //標題

// 如果希望顯示菜單,請返回true
returntrue;
}


上面的代碼示範了添加功能表項目的3種方法,下面解釋下第三種方法
add(int groupId, int itemId, int order, CharSequence title)。其中,第一個參數是組號,android中你可以給菜單分組,以便快速地操作同一組的菜單。第二個參數指定每個功能表項目的唯一ID號,你可以自己指定,也可以讓系統來自動分配,在響應菜單時你需要通過ID號來判斷哪個菜單被點擊了。因此常規的做法是定義一些ID常量,但在android中有更好的方法,就是通過資源檔來引用,這個之後介紹。第三個參數代表功能表項目顯示順序的編號,編號小的顯示在前面。

給功能表項目分組
@Override
publicboolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// 添加4個功能表項目,分成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;
}

 

你可以向上面這樣給功能表項目分組,分組之後就能使用menu中提供的方法對組進行操作了,如下:

 

menu.removeGroup(group1);    //刪除一組菜單
menu.setGroupVisible(gourp2, visible); //設定一組菜單是否可見
menu.setGroupEnabled(gourp2, enabled); //設定一組菜單是否可點
menu.setGroupCheckable(gourp2, checkable, exclusive); //設定一組菜單的勾選情況

 

響應功能表項目

android提供了多種響應功能表項目的方式,下面一一介紹

1、通過onOptionsItemSelected方法

使用的最多方法是重寫activity類的 onOptionsItemSelected(MenuItem)回調方法,每當有功能表項目被點擊時,android就會調用該方法,並傳入被點擊功能表項目。

 

@Override
publicboolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
//響應每個功能表項目(通過功能表項目的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表示處理完功能表項目的事件,不需要將該事件繼續傳播下去了
returntrue;
}

 

以上代碼可作為使用onOptionsItemSelected方法響應菜單的模板來使用,這裡為了方便起見將菜單ID寫入程式碼在程式裡,你可以使用常量或資源ID來使代碼更健壯。

2.使用監聽器

雖然第一種方法是推薦使用的方法,android還是提供了類似java swing的監聽器方式來響應菜單。使用監聽器的方式分為兩步:

 

//第一步:建立監聽器類
class MyMenuItemClickListener implements OnMenuItemClickListener {
@Override
publicboolean onMenuItemClick(MenuItem item) {
// do something here...
returntrue; //finish handling
}
}

//第二步:為功能表項目註冊監聽器
menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());

 

android文檔對onMenuItemClick(MenuItem item)回調方法的說明是"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執行

3.使用Intent響應菜單

第3種方式是直接在MenuItem上調用setIntent(Intent intent)方法,這樣android會自動在該菜單被點擊時調用 startActivity(Intent)。但是個人認為與其這樣還不如直接在onOptionsItemSelected的case裏手動調用 startActivity(Intent)來的直觀。

結語

本文詳細介紹了如何建立和響應選項菜單,下一篇《Android菜單詳解(三)——SubMenu和IconMenu》將繼續介紹子功能表和表徵圖菜單的使用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.