android第二部分-5章菜單_第1頁(yè)
android第二部分-5章菜單_第2頁(yè)
android第二部分-5章菜單_第3頁(yè)
android第二部分-5章菜單_第4頁(yè)
android第二部分-5章菜單_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余26頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Android菜單第五章菜單是應(yīng)用程序中非常重要的組成部分,能夠在不占用界面空間的前提下,為應(yīng)用程序提供了統(tǒng)一的功能和設(shè)置界面,并為程序開(kāi)發(fā)人員提供了易于使用的編程接口Android系統(tǒng)支持三種菜單選項(xiàng)菜單(OptionMenu)子菜單(Submenu)快捷菜單(ContextMenu)

菜單選項(xiàng)菜單選項(xiàng)菜單是一種經(jīng)常被使用的Android系統(tǒng)菜單打開(kāi)方式:通過(guò)“菜單鍵”(MENUkey)打開(kāi)選項(xiàng)菜單分類(lèi)圖標(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),通過(guò)點(diǎn)擊圖標(biāo)菜單最后的子項(xiàng)“More”才能打開(kāi)擴(kuò)展菜單是垂直的列表型菜單不能夠顯示圖標(biāo)支持單選框和復(fù)選框選項(xiàng)菜單重載Activity的onCreateOptionMenu()函數(shù),才能夠在Android應(yīng)用程序中使用選項(xiàng)菜單初次使用選項(xiàng)菜單時(shí),會(huì)調(diào)用onCreateOptionMenu()函數(shù),用來(lái)初始化菜單子項(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ù)類(lèi)型,值為1)定義第一個(gè)菜單子項(xiàng),以后的菜單子項(xiàng)僅需在Menu.FIRST增加相應(yīng)的數(shù)值即可第7行代碼是onCreateOptionsMenu()函數(shù)返回值,函數(shù)的返回值類(lèi)型為布爾型返回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對(duì)象作為一個(gè)參數(shù)被傳遞到函數(shù)內(nèi)部,因此在onCreateOptionsMenu()函數(shù)中,用戶可以使用Menu對(duì)象的add()函數(shù)添加菜單子項(xiàng)add()函數(shù)的語(yǔ)法第1個(gè)參數(shù)groupId是組ID,用以批量的對(duì)菜單子項(xiàng)進(jìn)行處理和排序第2關(guān)參數(shù)itemId是子項(xiàng)ID,是每一個(gè)菜單子項(xiàng)的唯一標(biāo)識(shí),通過(guò)子項(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ù)字鍵盤(pán)設(shè)定的快捷鍵第二個(gè)參數(shù)是為全鍵盤(pán)設(shè)定的快捷鍵,且不區(qū)分字母的大小寫(xiě)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ù),能夠動(dòng)態(tài)的添加、刪除菜單子項(xiàng),或修改菜單的標(biāo)題、圖標(biāo)和可見(jiàn)性等內(nèi)容onPrepareOptionsMenu()函數(shù)的返回值的含義與onCreateOptionsMenu()函數(shù)相同返回true則顯示菜單返回false則不顯示菜單5.4

菜單5.4.1選項(xiàng)菜單下面的代碼是在用戶每次打開(kāi)選項(xiàng)菜單時(shí),在菜單子項(xiàng)中顯示用戶打開(kāi)該子項(xiàng)的次數(shù)第1行代碼設(shè)置一個(gè)菜單子項(xiàng)的計(jì)數(shù)器,用來(lái)統(tǒng)計(jì)用戶打開(kāi)“上傳設(shè)置”子項(xiàng)的次數(shù)第4行代碼是通過(guò)將菜單子項(xiàng)的ID傳遞給menu.findItem()函數(shù),獲取到菜單子項(xiàng)的對(duì)象第5行代碼是通過(guò)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í)都會(huì)被調(diào)用下面的代碼說(shuō)明了如何通過(guò)菜單子項(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()的返回值表示是否對(duì)菜單的選擇事件進(jìn)行處理如果已經(jīng)處理過(guò)則返回true,否則返回false第2行的MenuItem.getItemId()函數(shù)可以獲取到被選擇菜單子項(xiàng)的ID完整代碼請(qǐng)參考OptionsMenu程序程序運(yùn)行后,通過(guò)點(diǎn)擊“菜單鍵”可以調(diào)出程序設(shè)計(jì)的兩個(gè)菜單子項(xiàng)5.4.2子菜單子菜單是能夠顯示更加詳細(xì)信息的菜單子項(xiàng)菜單子項(xiàng)使用了浮動(dòng)窗體的顯示形式,能夠更好適應(yīng)小屏幕的顯示方式菜單5.4.2子菜單Android系統(tǒng)的子菜單使用非常靈活,可以在選項(xiàng)菜單或快捷菜單中使用子菜單,有利于將相同或相似的菜單子項(xiàng)組織在一起,便于顯示和分類(lèi)子菜單不支持嵌套子菜單的添加是使用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對(duì)象上調(diào)用addSubMenu()函數(shù),在選項(xiàng)菜單中添加一個(gè)菜單子項(xiàng),用戶點(diǎn)擊后可以打開(kāi)子菜單addSubMenu()函數(shù)與選項(xiàng)菜單中使用過(guò)的add()函數(shù)支持相同的參數(shù),同樣可以指定菜單子項(xiàng)的ID、組ID和標(biāo)題等參數(shù),并且能夠通過(guò)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)。完整代碼請(qǐng)參考MySubMenu程序,運(yùn)行結(jié)果如圖5.4.3快捷菜單快捷菜單同樣采用了動(dòng)窗體的顯示方式,與子菜單的實(shí)現(xiàn)方式相同,但兩種菜單的啟動(dòng)方式卻截然不同啟動(dòng)方式:快捷菜單類(lèi)似于普通桌面程序中的“右鍵菜單”,當(dāng)用戶點(diǎn)擊界面元素超過(guò)2秒后,將啟動(dòng)注冊(cè)到該界面元素的快捷菜單使用方法:與使用選項(xiàng)菜單的方法非常相似,需要重載onCreateContextMenu()函數(shù)和onContextItemSelected()函數(shù)onCreateContextMenu()函數(shù)主要用來(lái)添加快捷菜單所顯示的標(biāo)題、圖標(biāo)和菜單子項(xiàng)等內(nèi)容菜單5.4.3快捷菜單選項(xiàng)菜單中的onCreateOptionsMenu()函數(shù)僅在選項(xiàng)菜單第一次啟動(dòng)時(shí)被調(diào)用一次快捷菜單的onCreateContextMenu()函數(shù)每次啟動(dòng)時(shí)都會(huì)被調(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類(lèi)支持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ù),將快捷菜單注冊(cè)到界面控件上(下方代碼第7行)。這樣,用戶在長(zhǎng)時(shí)間點(diǎn)擊該界面控件時(shí),便會(huì)啟動(dòng)快捷菜單為了能夠在界面上直接顯示用戶所選擇快捷菜單的菜單子項(xiàng),在代碼中引用了界面元素TextView(下方代碼第6行),通過(guò)更改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行中,通過(guò)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下方任何位置都可以啟動(dòng)快捷菜單如果將android:layout_width設(shè)置為wrap_content,則用戶必須準(zhǔn)確點(diǎn)擊TextView才能啟動(dòng)快捷菜單5.4

菜單5.4.3快捷菜單完整代碼參考MyContextMenu程序,運(yùn)行結(jié)果如圖所示菜單5.4.3快捷菜單在Android系統(tǒng)中,菜單不僅能夠在代碼中定義,而且可以像界面布局一樣在XML文件中進(jìn)行定義使用XML文件定義界面菜單,將代碼與界面設(shè)計(jì)分類(lèi),有助于簡(jiǎn)化代碼的復(fù)雜程度,并且更有利于界面的可視化下面將快捷菜的示例程序MyContextMen改用XML實(shí)現(xiàn),新程序的工程名稱(chēng)為MyXLMContoxtMenu菜單5.4.3快捷菜單首先需要?jiǎng)?chuàng)建保存菜單內(nèi)容的XML文件在/src目錄下建立子目錄menu,并在menu下建立context_menu.xml文件,代碼如下在描述菜單的XML文件中,必須以<menu>標(biāo)簽(代碼第1行)作為根節(jié)點(diǎn),<item>標(biāo)簽(代碼第2行)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論