android选项菜单源代码,Android应用程序----UI界面控件(菜单menu)
菜單是應(yīng)用程序中非常重要的組成部分,能夠在不占用界面空間的前提下,為應(yīng)用程序提供了統(tǒng)一的功能和設(shè)置界面,并為程序開發(fā)人員提供了易于使用的編程接口
Android系統(tǒng)支持三種菜單
選項(xiàng)菜單(Option Menu)
子菜單(Submenu)
快捷菜單(Context Menu)
選項(xiàng)菜單 q選項(xiàng)菜單是一種經(jīng)常被使用的Android系統(tǒng)菜單
打開方式:通過“菜單鍵”(MENU key)打開
選項(xiàng)菜單分類
圖標(biāo)菜單(Icon Menu)
擴(kuò)展菜單(Expanded Menu)
選項(xiàng)菜單是一種經(jīng)常被使用的Android系統(tǒng)菜單
打開方式:通過“菜單鍵”(MENU key)打開
選項(xiàng)菜單分類
圖標(biāo)菜單(Icon Menu)
擴(kuò)展菜單(Expanded Menu)
圖標(biāo)菜單能夠同時(shí)顯示文字和圖標(biāo)的菜單,最多支持6個(gè)子項(xiàng)
圖標(biāo)菜單不支持單選框和復(fù)選框
擴(kuò)展菜單是在圖標(biāo)菜單子項(xiàng)多余6個(gè)時(shí)才出現(xiàn),通過點(diǎn)擊圖標(biāo)菜單最后的子項(xiàng)“More”才能打開
擴(kuò)展菜單是垂直的列表型菜單
不能夠顯示圖標(biāo)
支持單選框和復(fù)選框
重載Activity的onCreateOptionMenu()函數(shù),才能夠在Android應(yīng)用程序中使用選項(xiàng)菜單
初次使用選項(xiàng)菜單時(shí),會(huì)調(diào)用onCreateOptionMenu()函數(shù),用來初始化菜單子項(xiàng)的相關(guān)內(nèi)容
設(shè)置菜單子項(xiàng)自身的子項(xiàng)的ID和組ID
菜單子項(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ù)的返回值類型為布爾型 q返回true將顯示在函數(shù)中設(shè)置的菜單,否則不能夠顯示菜單
第4行代碼Menu對(duì)象作為一個(gè)參數(shù)被傳遞到函數(shù)內(nèi)部,因此在onCreateOptionsMenu()函數(shù)中,用戶可以使用Menu對(duì)象的add()函數(shù)添加菜單子項(xiàng)
add()函數(shù)的語法
第1個(gè)參數(shù)groupId是組ID,用以批量的對(duì)菜單子項(xiàng)進(jìn)行處理和排序
第2關(guān)參數(shù)itemId是子項(xiàng)ID,是每一個(gè)菜單子項(xiàng)的唯一標(biāo)識(shí),通過子項(xiàng)ID使應(yīng)用程序能夠定位到用戶所選擇的菜單子項(xiàng)
第3個(gè)參數(shù)order是定義菜單子項(xiàng)在選項(xiàng)菜單中的排列順序
第4個(gè)參數(shù)title是菜單子項(xiàng)所顯示的標(biāo)題
添加菜單子項(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ū)分字母的大小寫
重載onPrepareOptionsMenu()函數(shù),能夠動(dòng)態(tài)的添加、刪除菜單子項(xiàng),或修改菜單的標(biāo)題、圖標(biāo)和可見性等內(nèi)容
onPrepareOptionsMenu()函數(shù)的返回值的含義與onCreateOptionsMenu()函數(shù)相同
返回true則顯示菜單
返回false則不顯示菜單
下面的代碼是在用戶每次打開選項(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)的對(duì)象
第5行代碼是通過MenuItem的setTitle()函數(shù)修改菜單標(biāo)題
onOptionsItemSelected()函數(shù)能夠處理菜單選擇事件,且該函數(shù)在每次點(diǎn)擊菜單子項(xiàng)時(shí)都會(huì)被調(diào)用
下面的代碼說明了如何通過菜單子項(xiàng)的子項(xiàng)ID執(zhí)行不同的操作
onOptionsItemSelected()的返回值表示是否對(duì)菜單的選擇事件進(jìn)行處理
如果已經(jīng)處理過則返回true,否則返回false
第2行的MenuItem.getItemId()函數(shù)可以獲取到被選擇菜單子項(xiàng)的ID
完整代碼請(qǐng)參考OptionsMenu程序
程序運(yùn)行后,通過點(diǎn)擊“菜單鍵”可以調(diào)出程序設(shè)計(jì)的兩個(gè)菜單子項(xiàng)
子菜單
子菜單是能夠顯示更加詳細(xì)信息的菜單子項(xiàng)
菜單子項(xiàng)使用了浮動(dòng)窗體的顯示形式,能夠更好適應(yīng)小屏幕的顯示方式
Android系統(tǒng)的子菜單使用非常靈活,可以在選項(xiàng)菜單或快捷菜單中使用子菜單,有利于將相同或相似的菜單子項(xiàng)組織在一起,便于顯示和分類
子菜單不支持嵌套
子菜單的添加是使用addSubMenu()函數(shù)實(shí)現(xiàn)
第1行代碼在onCreateOptionsMenu()函數(shù)傳遞的menu對(duì)象上調(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ù)
以上小節(jié)的代碼為基礎(chǔ),將“上傳設(shè)置”改為子菜單,并在子菜單中添加“上傳參數(shù)A”和“上傳參數(shù)B”兩個(gè)菜單子項(xiàng)。完整代碼請(qǐng)參考MySubMenu程序,運(yùn)行結(jié)果如圖
快捷菜單
快捷菜單同樣采用了動(dòng)窗體的顯示方式,與子菜單的實(shí)現(xiàn)方式相同,但兩種菜單的啟動(dòng)方式卻截然不同
啟動(dòng)方式:快捷菜單類似于普通桌面程序中的“右鍵菜單”,當(dāng)用戶點(diǎn)擊界面元素超過2秒后,將啟動(dòng)注冊(cè)到該界面元素的快捷菜單
使用方法:與使用選項(xiàng)菜單的方法非常相似,需要重載onCreateContextMenu()函數(shù)和onContextItemSelected()函數(shù)
onCreateContextMenu()函數(shù)主要用來添加快捷菜單所顯示的標(biāo)題、圖標(biāo)和菜單子項(xiàng)等內(nèi)容
選項(xiàng)菜單中的onCreateOptionsMenu()函數(shù)僅在選項(xiàng)菜單第一次啟動(dòng)時(shí)被調(diào)用一次
快捷菜單的onCreateContextMenu()函數(shù)每次啟動(dòng)時(shí)都會(huì)被調(diào)用一次
ContextMenu類支持add()函數(shù)(代碼第7行)和addSubMenu()函數(shù),可以在快捷菜單中添加菜單子項(xiàng)和子菜單
第5行代碼的onCreateContextMenu()函數(shù)中的參數(shù)
第1個(gè)參數(shù)menu是需要顯示的快捷菜單
第2個(gè)參數(shù)v是用戶選擇的界面元素
第3個(gè)參數(shù)menuInfo是所選擇界面元素的額外信息
菜單選擇事件的處理需要重載onContextItemSelected()函數(shù),該函數(shù)在用戶選擇快捷菜單中的菜單子項(xiàng)后被調(diào)用,與onOptionsItemSelected ()函數(shù)的使用方法基本相同
使用registerForContextMenu()函數(shù),將快捷菜單注冊(cè)到界面控件上(下方代碼第7行)。這樣,用戶在長(zhǎng)時(shí)間點(diǎn)擊該界面控件時(shí),便會(huì)啟動(dòng)快捷菜單
為了能夠在界面上直接顯示用戶所選擇快捷菜單的菜單子項(xiàng),在代碼中引用了界面元素TextView(下方代碼第6行),通過更改TextView的顯示內(nèi)容(上方代碼第5、8和11行),顯示用戶所選擇的菜單子項(xiàng)
下方代碼是/src/layout/main.xml文件的部分內(nèi)容,第1行聲明了TextView的ID為label,在上方代碼的第6行中,通過R.id.label將ID傳遞給findViewById()函數(shù),這樣用戶便能夠引用該界面元素,并能夠修改該界面元素的顯示內(nèi)容
需要注意的一點(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)快捷菜單
完整代碼參考MyContextMenu程序,運(yùn)行結(jié)果如圖所示
在Android系統(tǒng)中,菜單不僅能夠在代碼中定義,而且可以像界面布局一樣在XML文件中進(jìn)行定義
使用XML文件定義界面菜單,將代碼與界面設(shè)計(jì)分類,有助于簡(jiǎn)化代碼的復(fù)雜程度,并且更有利于界面的可視化
下面將快捷菜的示例程序MyContextMen改用XML實(shí)現(xiàn),新程序的工程名稱為MyXLMContoxtMenu
首先需要?jiǎng)?chuàng)建保存菜單內(nèi)容的XML文件 q在/src目錄下建立子目錄menu,并在menu下建立context_menu.xml文件,代碼如下
在描述菜單的XML文件中,必須以
XML菜單的顯示結(jié)果如圖所示
在XML文件中定義菜單后,在onCreateContextMenu()函數(shù)中調(diào)用inflater.inflate()方法,將XML資源文件傳遞給菜單對(duì)象
第4行代碼中的getMenuInflater()為當(dāng)前的Activity返回MenuInflater
第5行代碼將XML資源文件R.menu.context_menu,傳遞給menu這個(gè)快捷菜單對(duì)象
總結(jié)
以上是生活随笔為你收集整理的android选项菜单源代码,Android应用程序----UI界面控件(菜单menu)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 打印机打印html,An
- 下一篇: android传递布局到下个页面,浅入浅