下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Android菜單第五章菜單是應(yīng)用程序中非常重要的組成部分,能夠在不占用界面空間的前提下,為應(yīng)用程序提供了統(tǒng)一的功能和設(shè)置界面,并為程序開發(fā)人員提供了易于使用的編程接口Android系統(tǒng)支持三種菜單選項(xiàng)菜單(OptionMenu)子菜單(Submenu)快捷菜單(ContextMenu)
菜單選項(xiàng)菜單選項(xiàng)菜單是一種經(jīng)常被使用的Android系統(tǒng)菜單打開方式:通過“菜單鍵”(MENUkey)打開選項(xiàng)菜單分類圖標(biāo)菜單(IconMenu)擴(kuò)展菜單(ExpandedMenu)菜單選項(xiàng)菜單圖標(biāo)菜單能夠同時(shí)顯示文字和圖標(biāo)的菜單,最多支持6個(gè)子項(xiàng)圖標(biāo)菜單不支持單選框和復(fù)選框菜單菜單選項(xiàng)菜單擴(kuò)展菜單是在圖標(biāo)菜單子項(xiàng)多余6個(gè)時(shí)才出現(xiàn),通過點(diǎn)擊圖標(biāo)菜單最后的子項(xiàng)“More”才能打開擴(kuò)展菜單是垂直的列表型菜單不能夠顯示圖標(biāo)支持單選框和復(fù)選框選項(xiàng)菜單重載Activity的onCreateOptionMenu()函數(shù),才能夠在Android應(yīng)用程序中使用選項(xiàng)菜單初次使用選項(xiàng)菜單時(shí),會調(diào)用onCreateOptionMenu()函數(shù),用來初始化菜單子項(xiàng)的相關(guān)內(nèi)容設(shè)置菜單子項(xiàng)自身的子項(xiàng)的ID和組ID菜單子項(xiàng)顯示的文字和圖片等菜單選項(xiàng)菜單第1行和第2行代碼將菜單子項(xiàng)ID定義成靜態(tài)常量,并使用靜態(tài)常量Menu.FIRST(整數(shù)類型,值為1)定義第一個(gè)菜單子項(xiàng),以后的菜單子項(xiàng)僅需在Menu.FIRST增加相應(yīng)的數(shù)值即可第7行代碼是onCreateOptionsMenu()函數(shù)返回值,函數(shù)的返回值類型為布爾型返回true將顯示在函數(shù)中設(shè)置的菜單,否則不能夠顯示菜單菜單 finalstaticintMENU_DOWNLOAD=Menu.FIRST; finalstaticintMENU_UPLOAD=Menu.FIRST+1;@OverridepublicbooleanonCreateOptionsMenu(Menumenu){ menu.add(0,MENU_DOWNLOAD,0,"下載設(shè)置"); menu.add(0,MENU_UPLOAD,1,"上傳設(shè)置"); returntrue;}5.4.1選項(xiàng)菜單第4行代碼Menu對象作為一個(gè)參數(shù)被傳遞到函數(shù)內(nèi)部,因此在onCreateOptionsMenu()函數(shù)中,用戶可以使用Menu對象的add()函數(shù)添加菜單子項(xiàng)add()函數(shù)的語法第1個(gè)參數(shù)groupId是組ID,用以批量的對菜單子項(xiàng)進(jìn)行處理和排序第2關(guān)參數(shù)itemId是子項(xiàng)ID,是每一個(gè)菜單子項(xiàng)的唯一標(biāo)識,通過子項(xiàng)ID使應(yīng)用程序能夠定位到用戶所選擇的菜單子項(xiàng)第3個(gè)參數(shù)order是定義菜單子項(xiàng)在選項(xiàng)菜單中的排列順序第4個(gè)參數(shù)title是菜單子項(xiàng)所顯示的標(biāo)題5.4
菜單MenuItemandroid.view.Menu.add(intgroupId,intitemId,intorder,CharSequencetitle)5.4.1選項(xiàng)菜單添加菜單子項(xiàng)的圖標(biāo)和快捷鍵:使用setIcon()函數(shù)和setShortcut()函數(shù)MENU_DOWNLOAD菜單設(shè)置圖標(biāo)和快捷鍵的代碼第2行代碼中使用了新的圖像資源,用戶將需要使用的圖像文件拷貝到/res/drawable目錄下setShortcut()函數(shù)第一個(gè)參數(shù)是為數(shù)字鍵盤設(shè)定的快捷鍵第二個(gè)參數(shù)是為全鍵盤設(shè)定的快捷鍵,且不區(qū)分字母的大小寫5.4
菜單 menu.add(0,MENU_DOWNLOAD,0,"下載設(shè)置").setIcon(R.drawable.download);.setShortcut(’,’d’);練習(xí):選項(xiàng)菜單5.4.1選項(xiàng)菜單重載onPrepareOptionsMenu()函數(shù),能夠動態(tài)的添加、刪除菜單子項(xiàng),或修改菜單的標(biāo)題、圖標(biāo)和可見性等內(nèi)容onPrepareOptionsMenu()函數(shù)的返回值的含義與onCreateOptionsMenu()函數(shù)相同返回true則顯示菜單返回false則不顯示菜單5.4
菜單5.4.1選項(xiàng)菜單下面的代碼是在用戶每次打開選項(xiàng)菜單時(shí),在菜單子項(xiàng)中顯示用戶打開該子項(xiàng)的次數(shù)第1行代碼設(shè)置一個(gè)菜單子項(xiàng)的計(jì)數(shù)器,用來統(tǒng)計(jì)用戶打開“上傳設(shè)置”子項(xiàng)的次數(shù)第4行代碼是通過將菜單子項(xiàng)的ID傳遞給menu.findItem()函數(shù),獲取到菜單子項(xiàng)的對象第5行代碼是通過MenuItem的setTitle()函數(shù)修改菜單標(biāo)題5.4
菜單staticintMenuUploadCounter=0;@OverridepublicbooleanonPrepareOptionsMenu(Menumenu){ MenuItemuploadItem=menu.findItem(MENU_UPLOAD); uploadItem.setTitle("上傳設(shè)置:"+String.valueOf(MenuUploadCounter)); returntrue;}5.4.1選項(xiàng)菜單onOptionsItemSelected()函數(shù)能夠處理菜單選擇事件,且該函數(shù)在每次點(diǎn)擊菜單子項(xiàng)時(shí)都會被調(diào)用下面的代碼說明了如何通過菜單子項(xiàng)的子項(xiàng)ID執(zhí)行不同的操作5.4
菜單@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){ switch(item.getItemId()){ caseMENU_DOWNLOAD: MenuDownlaodCounter++; returntrue; caseMENU_UPLOAD: MenuUploadCounter++; returntrue; } returnfalse;}菜單5.4.1選項(xiàng)菜單onOptionsItemSelected()的返回值表示是否對菜單的選擇事件進(jìn)行處理如果已經(jīng)處理過則返回true,否則返回false第2行的MenuItem.getItemId()函數(shù)可以獲取到被選擇菜單子項(xiàng)的ID完整代碼請參考OptionsMenu程序程序運(yùn)行后,通過點(diǎn)擊“菜單鍵”可以調(diào)出程序設(shè)計(jì)的兩個(gè)菜單子項(xiàng)5.4.2子菜單子菜單是能夠顯示更加詳細(xì)信息的菜單子項(xiàng)菜單子項(xiàng)使用了浮動窗體的顯示形式,能夠更好適應(yīng)小屏幕的顯示方式菜單5.4.2子菜單Android系統(tǒng)的子菜單使用非常靈活,可以在選項(xiàng)菜單或快捷菜單中使用子菜單,有利于將相同或相似的菜單子項(xiàng)組織在一起,便于顯示和分類子菜單不支持嵌套子菜單的添加是使用addSubMenu()函數(shù)實(shí)現(xiàn)菜單SubMenuuploadMenu=(SubMenu)menu.addSubMenu(0,MENU_UPLOAD,1,"上傳設(shè)置") .setIcon(R.drawable.upload);uploadMenu.setHeaderIcon(R.drawable.upload);uploadMenu.setHeaderTitle("上傳參數(shù)設(shè)置");uploadMenu.add(0,SUB_MENU_UPLOAD_A,0,"上傳參數(shù)A");uploadMenu.add(0,SUB_MENU_UPLOAD_B,0,"上傳參數(shù)B");5.4.2子菜單第1行代碼在onCreateOptionsMenu()函數(shù)傳遞的menu對象上調(diào)用addSubMenu()函數(shù),在選項(xiàng)菜單中添加一個(gè)菜單子項(xiàng),用戶點(diǎn)擊后可以打開子菜單addSubMenu()函數(shù)與選項(xiàng)菜單中使用過的add()函數(shù)支持相同的參數(shù),同樣可以指定菜單子項(xiàng)的ID、組ID和標(biāo)題等參數(shù),并且能夠通過setIcon()函數(shù)菜單所顯示的圖標(biāo)第2行代碼使用setHeaderIcon()函數(shù),定義子菜單的圖標(biāo)第3行定義子菜單的標(biāo)題,若不規(guī)定子菜單的標(biāo)題,子菜單將顯示父菜單子項(xiàng)標(biāo)題,即第1行代碼中“上傳設(shè)置”第4行和第5行在子菜單中添加了兩個(gè)菜單子項(xiàng),菜單子項(xiàng)的更新函數(shù)和選擇事件處理函數(shù),仍然使用onPrepareOptionsMenu()函數(shù)和onOptionsItemSelected()函數(shù)菜單菜單5.4.2子菜單以上小節(jié)的代碼為基礎(chǔ),將“上傳設(shè)置”改為子菜單,并在子菜單中添加“上傳參數(shù)A”和“上傳參數(shù)B”兩個(gè)菜單子項(xiàng)。完整代碼請參考MySubMenu程序,運(yùn)行結(jié)果如圖5.4.3快捷菜單快捷菜單同樣采用了動窗體的顯示方式,與子菜單的實(shí)現(xiàn)方式相同,但兩種菜單的啟動方式卻截然不同啟動方式:快捷菜單類似于普通桌面程序中的“右鍵菜單”,當(dāng)用戶點(diǎn)擊界面元素超過2秒后,將啟動注冊到該界面元素的快捷菜單使用方法:與使用選項(xiàng)菜單的方法非常相似,需要重載onCreateContextMenu()函數(shù)和onContextItemSelected()函數(shù)onCreateContextMenu()函數(shù)主要用來添加快捷菜單所顯示的標(biāo)題、圖標(biāo)和菜單子項(xiàng)等內(nèi)容菜單5.4.3快捷菜單選項(xiàng)菜單中的onCreateOptionsMenu()函數(shù)僅在選項(xiàng)菜單第一次啟動時(shí)被調(diào)用一次快捷菜單的onCreateContextMenu()函數(shù)每次啟動時(shí)都會被調(diào)用一次菜單finalstaticintCONTEXT_MENU_1=Menu.FIRST;finalstaticintCONTEXT_MENU_2=Menu.FIRST+1;finalstaticintCONTEXT_MENU_3=Menu.FIRST+2;@OverridepublicvoidonCreateContextMenu(ContextMenumenu,Viewv,
ContextMenuInfomenuInfo){ menu.setHeaderTitle("快捷菜單標(biāo)題"); menu.add(0,CONTEXT_MENU_1,0,"菜單子項(xiàng)1"); menu.add(0,CONTEXT_MENU_2,1,"菜單子項(xiàng)2"); menu.add(0,CONTEXT_MENU_3,2,"菜單子項(xiàng)3");}5.4.3快捷菜單ContextMenu類支持add()函數(shù)(代碼第7行)和addSubMenu()函數(shù),可以在快捷菜單中添加菜單子項(xiàng)和子菜單第5行代碼的onCreateContextMenu()函數(shù)中的參數(shù)第1個(gè)參數(shù)menu是需要顯示的快捷菜單第2個(gè)參數(shù)v是用戶選擇的界面元素第3個(gè)參數(shù)menuInfo是所選擇界面元素的額外信息菜單5.4.3快捷菜單菜單選擇事件的處理需要重載onContextItemSelected()函數(shù),該函數(shù)在用戶選擇快捷菜單中的菜單子項(xiàng)后被調(diào)用,與onOptionsItemSelected()函數(shù)的使用方法基本相同菜單5.4.3快捷菜單菜單 @Override publicbooleanonContextItemSelected(MenuItemitem){ switch(item.getItemId()){ caseCONTEXT_MENU_1: LabelView.setText("菜單子項(xiàng)1"); returntrue; caseCONTEXT_MENU_2: LabelView.setText("菜單子項(xiàng)2"); returntrue; caseCONTEXT_MENU_3: LabelView.setText("菜單子項(xiàng)3"); returntrue; } returnfalse; }5.4.3快捷菜單使用registerForContextMenu()函數(shù),將快捷菜單注冊到界面控件上(下方代碼第7行)。這樣,用戶在長時(shí)間點(diǎn)擊該界面控件時(shí),便會啟動快捷菜單為了能夠在界面上直接顯示用戶所選擇快捷菜單的菜單子項(xiàng),在代碼中引用了界面元素TextView(下方代碼第6行),通過更改TextView的顯示內(nèi)容(上方代碼第5、8和11行),顯示用戶所選擇的菜單子項(xiàng)菜單 TextViewLabelView=null; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); LabelView=(TextView)findViewById(R.id.label); registerForContextMenu(LabelView); }5.4.3快捷菜單下方代碼是/src/layout/main.xml文件的部分內(nèi)容,第1行聲明了TextView的ID為label,在上方代碼的第6行中,通過R.id.label將ID傳遞給findViewById()函數(shù),這樣用戶便能夠引用該界面元素,并能夠修改該界面元素的顯示內(nèi)容菜單<TextViewandroid:id="@+id/label"android:layout_width="fill_parent"android:layout_height="fill_parent"android:text="@string/hello"/> 5.4.3快捷菜單需要注意的一點(diǎn),上方代碼的第2行,將android:layout_width設(shè)置為fill_parent,這樣TextView將填充滿父節(jié)點(diǎn)的所有剩余屏幕空間,用戶點(diǎn)擊屏幕TextView下方任何位置都可以啟動快捷菜單如果將android:layout_width設(shè)置為wrap_content,則用戶必須準(zhǔn)確點(diǎn)擊TextView才能啟動快捷菜單5.4
菜單5.4.3快捷菜單完整代碼參考MyContextMenu程序,運(yùn)行結(jié)果如圖所示菜單5.4.3快捷菜單在Android系統(tǒng)中,菜單不僅能夠在代碼中定義,而且可以像界面布局一樣在XML文件中進(jìn)行定義使用XML文件定義界面菜單,將代碼與界面設(shè)計(jì)分類,有助于簡化代碼的復(fù)雜程度,并且更有利于界面的可視化下面將快捷菜的示例程序MyContextMen改用XML實(shí)現(xiàn),新程序的工程名稱為MyXLMContoxtMenu菜單5.4.3快捷菜單首先需要創(chuàng)建保存菜單內(nèi)容的XML文件在/src目錄下建立子目錄menu,并在menu下建立context_menu.xml文件,代碼如下在描述菜單的XML文件中,必須以<menu>標(biāo)簽(代碼第1行)作為根節(jié)點(diǎn),<item>標(biāo)簽(代碼第2行)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年法務(wù)專員面試要點(diǎn)與題目解析
- 賓客行李員安全理論能力考核試卷含答案
- 酒精原料粉碎工保密意識競賽考核試卷含答案
- 2026年順豐速運(yùn)物流策劃師面試題集
- 乙腈裝置操作工安全知識宣貫知識考核試卷含答案
- 軋鋼精整工安全實(shí)踐強(qiáng)化考核試卷含答案
- 把鉤信號工成果能力考核試卷含答案
- 污水深基坑開挖專項(xiàng)施工方案
- 道岔鉗工復(fù)試強(qiáng)化考核試卷含答案
- 機(jī)動車檢測工創(chuàng)新方法強(qiáng)化考核試卷含答案
- 火災(zāi)自動報(bào)警系統(tǒng)故障應(yīng)急預(yù)案
- 人貨電梯施工方案
- 南大版一年級心理健康第7課《情緒小世界》課件
- 光大金甌資產(chǎn)管理有限公司筆試
- 算力產(chǎn)業(yè)園項(xiàng)目計(jì)劃書
- 塔式起重機(jī)安全管理培訓(xùn)課件
- 老年髖部骨折快速康復(fù)治療
- 【初中地理】跨學(xué)科主題學(xué)習(xí)探 索外來食料作物的傳播史課件-2024-2025學(xué)年七年級上學(xué)期(人教版2024)
- 四川省南充市2024-2025學(xué)年高一地理上學(xué)期期末考試試題含解析
- 化學(xué)品管理控制程序
- 探索·鄱陽湖智慧樹知到期末考試答案2024年
評論
0/150
提交評論