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