Android菜單操作之創(chuàng)建并響應菜單
上一篇《學習理解Android菜單Menu操作》簡單介紹了一下Android的菜單,今天讓我們看一下如何通過代碼創(chuàng)建和響應最常用的選項菜單(options menu)。
一、創(chuàng)建options menu
之前提到,Android的activity已經(jīng)為我們提前創(chuàng)建好了android.view.Menu對象,并提供了回調方法onCreateOptionsMenu(Menu menu)供我們初始化菜單的內容。該方法只會在選項菜單第一次顯示的時候被執(zhí)行,如果你需要動態(tài)改變選項菜單的內容,請使用 onPrepareOptionsMenu(Menu)。
@Override publicboolean onCreateOptionsMenu(Menu menu) { // 調用父類方法來加入系統(tǒng)菜單 // 雖然目前android還沒有系統(tǒng)菜單,但是為了兼容到以后的版本,最好加上 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)。其中,第一個參數(shù)是組號,android中你可以給菜單分組,以便快速地操作同一組的菜單。第二個參數(shù)指定每個菜單項的唯一ID號,你可以自己指定,也可以讓系統(tǒng)來自動分配,在響應菜單時你需要通過ID號來判斷哪個菜單被點擊了。因此常規(guī)的做法是定義一些ID常量,但在android中有更好的方法,就是通過資源文件來引用,這個之后介紹。第三個參數(shù)代表菜單項顯示順序的編號,編號小的顯示在前面。
二、給菜單項分組
@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表示處理完菜單項的事件,不需要將該事件繼續(xù)傳播下去了 returntrue; }
以上代碼可作為使用onOptionsItemSelected方法響應菜單的模板來使用,這里為了方便起見將菜單ID硬編碼在程序里,你可以使用常量或資源ID來使代碼更健壯。
2.使用監(jiān)聽器
雖然第一種方法是推薦使用的方法,android還是提供了類似java swing的監(jiān)聽器方式來響應菜單。使用監(jiān)聽器的方式分為兩步:
//第一步:創(chuàng)建監(jiān)聽器類 class MyMenuItemClickListener implements OnMenuItemClickListener { @Override publicboolean onMenuItemClick(MenuItem item) { // do something here... returntrue; //finish handling } } //第二步:為菜單項注冊監(jiān)聽器 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執(zhí)行。
3.使用Intent響應菜單
第3種方式是直接在MenuItem上調用setIntent(Intent intent)方法,這樣android會自動在該菜單被點擊時調用 startActivity(Intent)。但是個人認為與其這樣還不如直接在onOptionsItemSelected的case里手動調用 startActivity(Intent)來的直觀。
結語
本文詳細介紹了如何創(chuàng)建和響應選項菜單,下一篇《Android菜單操作之SubMenu和IconMenu》將繼續(xù)介紹子菜單和圖標菜單的使用,大家繼續(xù)關注哦。
- android游戲載入的activity跳轉到游戲主菜單的activity具體實現(xiàn)
- Android使用onCreateOptionsMenu()創(chuàng)建菜單Menu的方法詳解
- android教程之使用popupwindow創(chuàng)建菜單示例
- 在Android中創(chuàng)建菜單項Menu以及獲取手機分辨率的解決方法
- 用Android MenuInflater創(chuàng)建菜單項的方法步驟
- Android編程實現(xiàn)為ListView創(chuàng)建上下文菜單(ContextMenu)的方法
- Android中選項菜單(OptionMenu)的創(chuàng)建方法
- Android創(chuàng)建Menu菜單實例
- Android中為activity創(chuàng)建菜單
相關文章
利用Kotlin如何實現(xiàn)Android開發(fā)中的Parcelable詳解
這篇文章主要給大家介紹了關于利用Kotlin如何實現(xiàn)Android開發(fā)中的Parcelable的相關資料,并且給大家介紹了關于Kotlin使用parcelable出現(xiàn):BadParcelableException: Parcelable protocol requires a Parcelable.Creator...問題的解決方法,需要的朋友可以參考下。2017-12-12Android listview ExpandableListView實現(xiàn)多選,單選,全選,edittext實現(xiàn)批量輸入
這篇文章主要介紹了Android listview ExpandableListView實現(xiàn)多選,單選,全選,edittext實現(xiàn)批量輸入的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-01-01Android檢測手機中存儲卡及剩余空間大小的方法(基于Environment,StatFs及DecimalFormat
這篇文章主要介紹了Android檢測手機中存儲卡及剩余空間大小的方法,基于Environment,StatFs及DecimalFormat實現(xiàn)該功能,具有一定參考借鑒價值,需要的朋友可以參考下2016-01-01Android編程實現(xiàn)Listview點擊展開和隱藏的方法
這篇文章主要介紹了Android編程實現(xiàn)Listview點擊展開和隱藏的方法,涉及Android中Listview的響應點擊與樣式變換相關操作技巧,需要的朋友可以參考下2015-12-12Android TableLayout數(shù)據(jù)列表的回顯清空實現(xiàn)思路及代碼
數(shù)據(jù)列表的回顯必須從后面減去子元素同時必須從后面減去子元素,感興趣的朋友可以看下具體的實現(xiàn)代碼,希望對你學習Android TableLayout有所幫助2013-04-04Android使用注解代替枚舉節(jié)省系統(tǒng)內存開銷的方法
在本篇文章里小編給大家整理的是關于Android使用注解代替枚舉節(jié)省系統(tǒng)內存開銷的方法和實例,需要的朋友們參考下。2020-01-01flutter傳遞值到任意widget(當需要widget嵌套使用需要傳遞值的時候)
這篇文章主要介紹了flutter傳遞值到任意widget(當需要widget嵌套使用需要傳遞值的時候),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07Flutter 封裝一個 Banner 輪播圖效果的實例代碼
這篇文章主要介紹了Flutter 封裝一個 Banner 輪播圖效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07