6-Android用戶界面菜單_第1頁
6-Android用戶界面菜單_第2頁
6-Android用戶界面菜單_第3頁
6-Android用戶界面菜單_第4頁
6-Android用戶界面菜單_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第2章 Android用戶界面-6,本章學(xué)習(xí)目標(biāo),掌握選項菜單、子菜單和快捷菜單的使用方法,菜單,菜單是應(yīng)用程序中非常重要的組成部分,能夠在不占用界面空間的前提下,為應(yīng)用程序提供了統(tǒng)一的功能和設(shè)置界面,并為程序開發(fā)人員提供了易于使用的編程接口 Android系統(tǒng)支持三種菜單 選項菜單(Option Menu) 子菜單(Submenu) 快捷菜單(Context Menu),菜單,Android的選項菜單默認(rèn)是看不見的,當(dāng)用戶按下MENU鍵時,程序菜單將會出現(xiàn)在屏幕下方。 Android系統(tǒng)默認(rèn)最多只有6個菜單位,如果超過6個菜單,系統(tǒng)將會在第6個菜單位顯示更多。 Android系統(tǒng)的菜單支持主

2、要通過4個接口來體現(xiàn)。,選項菜單是一種經(jīng)常被使用的Android系統(tǒng)菜單 打開方式:通過“菜單鍵”(MENU)打開 選項菜單分類 圖標(biāo)菜單(Icon Menu) 擴(kuò)展菜單(Expanded Menu),選項菜單,圖標(biāo)菜單 圖標(biāo)菜單能夠同時顯示文字和圖標(biāo)的菜單,最多支持6個子項 圖標(biāo)菜單不支持單選框和復(fù)選框,選項菜單,擴(kuò)展菜單 擴(kuò)展菜單是在圖標(biāo)菜單子項多余6個時才出現(xiàn),通過點(diǎn)擊圖標(biāo)菜單最后的子項“More”才能打開 擴(kuò)展菜單是垂直的列表型菜單 不能夠顯示圖標(biāo) 支持單選框和復(fù)選框,選項菜單,重載onCreateOptionMenu()方法 重載Activity的onCreateOptionMenu

3、()方法,才能夠在Android應(yīng)用程序中使用選項菜單 初次使用選項菜單時,會調(diào)用onCreateOptionMenu()方法,用來初始化菜單子項的相關(guān)內(nèi)容 設(shè)置菜單子項顯示的文字和圖片等,選項菜單,public boolean onCreateOptionsMenu(Menu menu) menu.add(Menu.NONE, 1,8, 刪除).setIcon(android.R.drawable.ic_menu_delete); menu.add(Menu.NONE, 2, 2, 保存).setIcon(android.R.drawable.ic_menu_edit); menu.add(

4、Menu.NONE, 3, 6, 幫助).setIcon(android.R.drawable.ic_menu_help); menu.add(Menu.NONE, 4, 1, 添加).setIcon( android.R.drawable.ic_menu_add); menu.add(Menu.NONE, 5, 4, 詳細(xì)).setIcon( android.R.drawable.ic_menu_info_details); menu.add(Menu.NONE, 3, 3, 發(fā)送).setIcon(android.R.drawable.ic_menu_send); menu.add(Men

5、u.NONE, 7, 7, 分享).setIcon(android.R.drawable.ic_menu_share); menu.add(Menu.NONE, 8, 5, 查找).setIcon(android.R.drawable.ic_menu_search); menu.add(Menu.NONE, 9, 9, 撥號).setIcon(android.R.drawable.ic_menu_call); /返回true將顯示在函數(shù)中設(shè)置的菜單,否則不能夠顯示菜單 return true; ,重載onCreateOptionMenu()方法 menu.add(Menu.NONE, 1,8,

6、 刪除).setIcon(android.R.drawable.ic_menu_delete); 圖片都是系統(tǒng)自帶的:android.R.drawable.ic_menu_delete,選項菜單,選項菜單的add()方法 Menu對象作為一個參數(shù)被傳遞到方法內(nèi)部,因此在onCreateOptionsMenu()方法中,用戶可以使用Menu對象的add()方法添加菜單子項 add()方法的語法: MenuItem android.view.Menu.add(int groupId, int itemId, int order, CharSequence title) 第1個參數(shù)groupId是組

7、ID,如果不需要可以設(shè)置為Menu.NONE。 第2個參數(shù)itemId:menu當(dāng)中每一項的id.這個id應(yīng)該是唯一的 第3個參數(shù)order是排序的信息,根據(jù)這個字段的大小,menu對其中的項進(jìn)行排序顯示.orader小的顯示在前面,大的在后面. 第4個參數(shù)title是菜單子項所顯示的標(biāo)題,選項菜單,重載onOptionsItemSelected(MenuItem item)方法 重載onOptionsItemSelected(MenuItem item)方法,當(dāng)用戶單擊指定菜單項時,程序可以為菜單項的單擊事件提供響應(yīng)。如果需要針對不同菜單提供響應(yīng),就要在onOptionsItemSelect

8、ed(MenuItem item)方法中進(jìn)行判斷。由于程序需要在該方法中準(zhǔn)確判斷是哪個菜單項被單擊了,因此添加菜單時應(yīng)為每個菜單項指定ID。 MenuItem.getItemId()方法可以獲取到被選擇菜單子項的ID onOptionsItemSelected ()的返回值表示是否對菜單的選擇事件進(jìn)行處理 如果已經(jīng)處理過則返回true,否則返回false,選項菜單,選項菜單,重載onOptionsItemSelected(MenuItem item)方法,public boolean onOptionsItemSelected(MenuItem item) switch (item.getIt

9、emId() case 1:Toast.makeText(this, 刪除, Toast.LENGTH_LONG).show();break; case 2:Toast.makeText(this, 保存, Toast.LENGTH_LONG).show();break; case 3:Toast.makeText(this, 幫助, Toast.LENGTH_LONG).show();break; case 4:Toast.makeText(this, 添加, Toast.LENGTH_LONG).show();break; case 5:Toast.makeText(this, 詳細(xì), T

10、oast.LENGTH_LONG).show();break; case 6:Toast.makeText(this, 發(fā)送, Toast.LENGTH_LONG).show();break; case 7:Toast.makeText(this, 分享, Toast.LENGTH_LONG).show();break; case 8:Toast.makeText(this, 查找, Toast.LENGTH_LONG).show();break; case 9:Toast.makeText(this, 撥號, Toast.LENGTH_LONG).show(); break; default

11、: break; return false; ,重載onPrepareOptionsMenu()方法 重載onPrepareOptionsMenu()方法,能夠動態(tài)的添加、刪除菜單子項,或修改菜單的標(biāo)題、圖標(biāo)和可見性等內(nèi)容 onPrepareOptionsMenu()方法的返回值的含義與onCreateOptionsMenu()方法相同 返回true則顯示 返回false則不顯示,public boolean onPrepareOptionsMenu(Menu menu) Toast.makeText(this, 選項菜單顯示之前onPrepareOptionsMenu方法會被調(diào)用“ , To

12、ast.LENGTH_LONG).show(); return true; ,選項菜單,子菜單 子菜單是能夠顯示更加詳細(xì)信息的菜單子項 菜單子項使用了浮動窗體的顯示形式,能夠更好適應(yīng)小屏幕的顯示方式,子菜單,創(chuàng)建子菜單的步驟 覆蓋Activity的onCreateOptionsMenu()方法,調(diào)用Menu的addSubMenu()方法來添加子菜單 調(diào)用SubMenu的add()方法,添加子菜單 覆蓋onOptionsItemSelected()方法,響應(yīng)子菜單的單擊事件,子菜單,子菜單 Android系統(tǒng)的子菜單使用非常靈活,可以在選項菜單或快捷菜單中使用子菜單,有利于將相同或相似的菜單子項

13、組織在一起,便于顯示和分類 子菜單不支持嵌套 子菜單的添加是使用addSubMenu()方法實現(xiàn),子菜單,子菜單,Menu的addSubMenu()方法 與add()方法一樣它有四個重載方法: public abstract SubMenu addSubMenu (int groupId, int itemId, int order, CharSequence title) public abstract SubMenu addSubMenu (int groupId, int itemId, int order, int titleRes) public abstract SubMenu a

14、ddSubMenu (CharSequence title) public abstract SubMenu addSubMenu (int titleRes),子菜單,子菜單的實現(xiàn),private TextView tx; private final static int GROUP1=1; private final static int GROUP2=2; private final static int NEW_COLOR1=Menu.FIRST; private final static int NEW_COLOR2=NEW_COLOR1+1; private final stati

15、c int NEW_COLOR3=NEW_COLOR2+1; private final static int NEW_HOBBY1=NEW_COLOR3+1; private final static int NEW_HOBBY2=NEW_HOBBY1+1; private final static int NEW_HOBBY3=NEW_HOBBY2+1; private MenuItem bg1,bg2,bg3; private MenuItem hobby=new MenuItem3; public void onCreate(Bundle savedInstanceState) sup

16、er.onCreate(savedInstanceState); setContentView(R.layout.main); tx=(TextView) findViewById(R.id.tx); ,子菜單,子菜單的實現(xiàn),public boolean onCreateOptionsMenu(Menu menu) SubMenu submenu1=menu.addSubMenu(背景顏色); submenu1.setIcon(R.drawable.q4); submenu1.setHeaderIcon(R.drawable.q4); bg1=submenu1.add(GROUP1, NEW_

17、COLOR1, 1, 深粉紅色); bg2=submenu1.add(GROUP1, NEW_COLOR2, 2, 深天藍(lán)色); bg3=submenu1.add(GROUP1, NEW_COLOR3, 3, 間春綠色); bg1.setChecked(true); /設(shè)置GROUP1組是可選的、互斥的 submenu1.setGroupCheckable(GROUP1, true, true); SubMenu submenu2=menu.addSubMenu(我的愛好); hobby0=submenu2.add(GROUP2, NEW_HOBBY1, 1, 旅游); hobby1=subm

18、enu2.add(GROUP2, NEW_HOBBY2, 2, 籃球); hobby2=submenu2.add(GROUP2, NEW_HOBBY3, 3, 游泳); hobby0.setCheckable(true); hobby1.setCheckable(true); hobby2.setCheckable(true);/設(shè)置為可多選 return super.onCreateOptionsMenu(menu); ,子菜單,子菜單的實現(xiàn),public boolean onOptionsItemSelected(MenuItem item) switch(item.getItemId()

19、 case NEW_COLOR1: case NEW_COLOR2: case NEW_COLOR3:item.setChecked(true); selectColor(); break; case NEW_HOBBY1: case NEW_HOBBY2: case NEW_HOBBY3: item.setChecked(!item.isChecked(); selectColor(); break; return super.onOptionsItemSelected(item); ,子菜單,子菜單的實現(xiàn),private void selectColor() if (bg1.isCheck

20、ed() tx.setBackgroundResource(R.color.c1); else if (bg2.isChecked() tx.setBackgroundResource(R.color.c2); else if (bg3.isChecked() tx.setBackgroundResource(R.color.c3); else for (MenuItem mi : hobby) if (mi.isChecked() tx.setText(tx.getText().toString() + mi.getTitle(); ,子菜單效果圖,子菜單,上下文菜單,Android中上下文

21、菜單就是ContextMenu。 ContextMenu的效果就像是PC機(jī)上的鼠標(biāo)右鍵,當(dāng)為一個視圖注冊了上下文菜單之后,長按(2秒左右)這個視圖對象就會彈出一個浮動菜單,即上下文菜單。任何視圖都可以注冊上下文菜單,不過,最常見的是用于列表視圖ListView的item。 上下文菜單不同于選項菜單,選項菜單服務(wù)于Activity,而上下文菜單則是注冊到某個View對象上的。如果一個View對象注冊了上下文菜單,用戶可以通過長按該View對象以呼出上下文菜單。上下文菜單不支持快捷鍵,其菜單選項也不能附帶圖標(biāo),但是可以為上下文菜單的標(biāo)題指定圖標(biāo)。,上下文菜單(快捷菜單) 上下文菜單同樣采用了動窗體

22、的顯示方式,與子菜單的實現(xiàn)方式相同,但兩種菜單的啟動方式卻截然不同 啟動方式:上下文菜單類似于普通桌面程序中的“右鍵菜單”,當(dāng)用戶點(diǎn)擊界面元素超過2秒后,將啟動注冊到該界面元素的快捷菜單 使用方法:與使用選項菜單的方法非常相似,需要重載onCreateContextMenu()方法和onContextItemSelected()方法 onCreateContextMenu()方法主要用來添加上下文菜單所顯示的標(biāo)題、圖標(biāo)和菜單子項等內(nèi)容 選項菜單中的onCreateOptionsMenu()方法僅在選項菜單第一次啟動時被調(diào)用一次,上下文菜單的onCreateContextMenu()方法每次啟動

23、時都會被調(diào)用一次。,上下文菜單,開發(fā)上下文菜單的步驟: 覆蓋 Activity 的 onCreateContenxtMenu() 方法,調(diào)用 Menu 的 add 方法添加菜單項(MenuItem)。 覆蓋 Activity 的 onContextItemSelected() 方法,響應(yīng)上下文菜單菜單項的單擊事件。 調(diào)用 registerForContextMenu() 方法,為視圖注冊上下文菜單。,上下文菜單,上下文菜單 使用registerForContextMenu()方法,將上下文菜單注冊到界面控件上。這樣,用戶在長時間點(diǎn)擊該界面控件時,便會啟動上下文菜單。,public void o

24、nCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); txt=(TextView)findViewById(R.id.textview); registerForContextMenu(txt); ,上下文菜單,ContextMenu類支持add()方法和addSubMenu()方法,可以在上下文菜單中添加菜單子項和子菜單。onCreateContextMenu()方法中的參數(shù) 第1個參數(shù)menu是需要顯示的快捷菜單 第2個參數(shù)v是用戶選擇的界面

25、元素 第3個參數(shù)menuInfo是所選擇界面元素的額外信息,public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) menu.add(0,MENU1, 0, java); menu.add(0,MENU2, 0, 3G); menu.add(0,MENU3, 0, php); /將3個菜單項設(shè)為單選菜單項 menu.setGroupCheckable(0, true,true); /將上下文菜單的圖標(biāo)、標(biāo)題 menu.setHeaderIcon(R.drawable.h3); menu.setHeaderTitle(選擇專業(yè)); ,上下文菜單,重載onContextItemSelected()方法 菜單選擇事件的處理需要重載onContextItemSelected()方法,該方法在用戶選擇快捷菜單中的菜單子項后被調(diào)用,與on

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論