版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 第4章 事件處理本章學(xué)習(xí)目標(biāo):本章要達(dá)到的主要目標(biāo):了解Android中的事件處理的原理;掌握Android中的主要事件:單擊事件、長(zhǎng)按事件、焦點(diǎn)改變事件、鍵盤(pán)事件、觸摸事件、菜單事件的基本操作。4.1 Android中的事件處理基礎(chǔ)Android在事件處理過(guò)程中主要涉及到3個(gè)概念:1、事件(Event):表示對(duì)圖形界面操作的描述,通常被封裝成各種類,比如:?jiǎn)螕羰录?、觸摸事件、鍵盤(pán)事件等。2、事件源(EventSource):事件源是指事件發(fā)生的場(chǎng)所,通常是指各個(gè)組件,例如:Button、EditText等控件。3、事件監(jiān)聽(tīng)器(EventListener):事件監(jiān)聽(tīng)器是指接收事件對(duì)象并對(duì)其進(jìn)
2、行處理的對(duì)象,事件處理一般是一個(gè)為實(shí)現(xiàn)某些特定接口類而創(chuàng)建的對(duì)象。例如:?jiǎn)螕舭粹o后,屏幕顯示“你好!”,在這個(gè)事件處理中,事件是“單擊事件”,事件源是“按鈕”,事件監(jiān)聽(tīng)器是定義的“OnClickListener”對(duì)象,由它來(lái)實(shí)現(xiàn)具體的操作。4.1 Android中的事件處理基礎(chǔ)事件處理的過(guò)程1為事件源對(duì)象添加監(jiān)聽(tīng),當(dāng)某個(gè)事件被觸發(fā)時(shí),系統(tǒng)才會(huì)知道該通知誰(shuí)來(lái)處理這個(gè)事件,(A)所示。2當(dāng)事件發(fā)生時(shí),系統(tǒng)會(huì)將事件封裝成相應(yīng)類型的事件對(duì)象,并發(fā)送給注冊(cè)到事件源的事件監(jiān)聽(tīng)器,(B)所示。3當(dāng)監(jiān)聽(tīng)器對(duì)象接收到事件對(duì)象之后,系統(tǒng)會(huì)調(diào)用監(jiān)聽(tīng)器中相應(yīng)的事件處理方法來(lái)處理事件并給出響應(yīng),(C)所示。4.1 An
3、droid中的事件處理基礎(chǔ)4.1.2 事件處理模型Android的事件處理模型常用的有:基于監(jiān)聽(tīng)接口的事件處理、基于回調(diào)的事件處理。1、基于監(jiān)聽(tīng)接口的事件處理基于監(jiān)聽(tīng)的事件處理模型的編程步驟如下:1)獲取普通界面組件;2)實(shí)現(xiàn)事件監(jiān)聽(tīng)類,該監(jiān)聽(tīng)類是一個(gè)特殊的java類,必須實(shí)現(xiàn)一個(gè)XXXListener接口;3)調(diào)用事件源的setXXXListener方法注冊(cè)事件監(jiān)聽(tīng)器。4.1 Android中的事件處理基礎(chǔ)4.1.2 事件處理模型Android提供了以下幾種基于監(jiān)聽(tīng)接口的事件處理模型:1)OnClickListener接口:?jiǎn)螕羰录?)OnLongClickListener接口:長(zhǎng)按事件。
4、3)OnFocusChangeListener接口:焦點(diǎn)改變事件。4)OnKeyListener接口:鍵盤(pán)事件。5)OnTouchListener接口:觸摸事件。6)OnCreateContextMenuListener接口:上下文菜單事件。4.1 Android中的事件處理基礎(chǔ)4.1.2 事件處理模型2、基于回調(diào)機(jī)制的事件處理Android平臺(tái)中,每個(gè)View都有自己的處理事件的回調(diào)方法,可以通過(guò)重寫(xiě)View中的這些回調(diào)方法來(lái)實(shí)現(xiàn)需要的響應(yīng)事件,Android提供了以下回調(diào)方法供用戶使用:1)onKeyDown:用來(lái)捕捉手機(jī)鍵盤(pán)被按下的事件。2)onKeyUp:用來(lái)捕捉手機(jī)鍵盤(pán)按鍵抬起的事件
5、。3)onTouchEvent:用來(lái)處理手機(jī)屏幕的觸摸事件。4)onTrackBallEvent:用來(lái)處理軌跡球事件。5)onFocusChanged:用來(lái)來(lái)處理焦點(diǎn)改變的事件。4.2單擊事件OnClickListener單擊事件需要注冊(cè)相應(yīng)的監(jiān)聽(tīng)器(setOnClickListener)監(jiān)聽(tīng)事件的來(lái)源,利用OnClickListener接口中的onClick方法,當(dāng)事件發(fā)生時(shí)作出相應(yīng)的處理。單擊事件使用View.OnClickListener接口進(jìn)行事件的處理,此接口定義如下:public static interface View.OnClickListenerpublic void on
6、Click(View v) ;當(dāng)單擊事件觸發(fā)之后自動(dòng)使用該接口中的方法:public void onClick(View v)方法進(jìn)行事件處理。說(shuō)明:需要實(shí)現(xiàn)onClick方法,參數(shù)v為事件發(fā)生的事件源。4.2單擊事件OnClickListener單擊事件的實(shí)現(xiàn)步驟:1)通過(guò)組件ID獲取組件實(shí)例;例如:this.mybut=(Button)super.findViewById(R.id.mybut); /獲得按鈕2)為該組件注冊(cè)O(shè)nClickListener監(jiān)聽(tīng);例如:mybut.setOnClickListener(new ShowListener() ; / 注冊(cè)監(jiān)聽(tīng)3)實(shí)現(xiàn)onClick
7、方法。例如:private class ShowListener implements OnClickListener / 定義監(jiān)聽(tīng)處理程序 public void onClick(View v) /執(zhí)行具體操作4.2單擊事件OnClickListener實(shí)例4_1:?jiǎn)螕羰录?shí)例編程實(shí)現(xiàn):手機(jī)界面顯示3個(gè)組件EditText,Button,TextView,單擊Button時(shí)會(huì)在手機(jī)上顯示輸入的信息。4.3長(zhǎng)按事件OnLongClickListener在Android中提供了長(zhǎng)按事件的處理操作,長(zhǎng)按事件只有在觸發(fā)2秒之后才會(huì)有反應(yīng),長(zhǎng)按事件使用View.OnLongClickListener接
8、口進(jìn)行事件的處理操作。此接口定義如下:public static interface View.OnLongClickListenerpublic boolean onLongClick(View v) ; 當(dāng)長(zhǎng)按事件觸發(fā)之后自動(dòng)使用該接口中的public boolean onLongClick(View v)方法進(jìn)行事件處理。4.3長(zhǎng)按事件OnLongClickListener長(zhǎng)按事件的實(shí)現(xiàn)步驟:1)通過(guò)組件ID獲取組件實(shí)例;例如:bgimg=(ImageView)findViewById(R.id.bgimg);2)為該組件注冊(cè)O(shè)nLongClickListener監(jiān)聽(tīng);例如:bgimg.
9、setOnLongClickListener(new OnLongClickListener()3)實(shí)現(xiàn)onLongClick方法。例如:public boolean onLongClick(View v) 4.3長(zhǎng)按事件OnLongClickListener實(shí)例4_2:長(zhǎng)按事件實(shí)例編程實(shí)現(xiàn):長(zhǎng)按一張圖片,將這張圖片設(shè)置為背景。4.4焦點(diǎn)改變事件OnFocusChangeListener焦點(diǎn)改變事件是指對(duì)一個(gè)組件狀態(tài)的監(jiān)聽(tīng),是在組件獲得或失去焦點(diǎn)時(shí)進(jìn)行處理操作,所有的組件都存在有監(jiān)聽(tīng)焦點(diǎn)變化的方法,利用OnFocusChangeListener接口來(lái)監(jiān)聽(tīng)焦點(diǎn)改變事件。此接口定義如下:publi
10、c void setOnFocusChangeListener(View.OnFocusChangeListener l)當(dāng)焦點(diǎn)改變事件觸發(fā)之后自動(dòng)使用該接口中的方法public void onFocusChange(View v, Boolean hasFocus)進(jìn)行事件處理。4.4焦點(diǎn)改變事件OnFocusChangeListener焦點(diǎn)改變事件的實(shí)現(xiàn)步驟:1)通過(guò)組件ID獲取組件實(shí)例;例如:this.edit = (EditText) super.findViewById(R.id.edit1);2)為該組件注冊(cè)O(shè)nFocusChangeListener監(jiān)聽(tīng);例如:this.edit.
11、setOnFocusChangeListener(new OnFocusChangeListenerImpl();3)實(shí)現(xiàn)onFocusChange方法。例如:public void onFocusChange(View v, boolean hasFocus) 4.4焦點(diǎn)改變事件OnFocusChangeListener實(shí)例4_3:焦點(diǎn)改變事件實(shí)例 一般輸入信息的時(shí)候會(huì)要求對(duì)輸入的信息的合法性做些判斷,例如輸入的郵箱地址要符合相應(yīng)的規(guī)范,類似這樣的操作就可以用焦點(diǎn)改變事件來(lái)實(shí)現(xiàn)。4.5鍵盤(pán)事件OnKeyListener鍵盤(pán)事件是用戶在利用鍵盤(pán)輸入數(shù)據(jù)時(shí)所觸發(fā)的操作,主要功能是用于鍵盤(pán)的監(jiān)聽(tīng)處
12、理操作,鍵盤(pán)事件使用OnKeyListener接口進(jìn)行事件的處理。OnKeyListener接口定義如下:public static interface View.OnKeyListener public boolean onKey(View v, int keyCode, KeyEvent event) ;當(dāng)鍵盤(pán)事件觸發(fā)之后自動(dòng)使用該接口中的回調(diào)方法public boolean onKey(View v, int keyCode, KeyEvent event)進(jìn)行事件處理。4.5鍵盤(pán)事件OnKeyListener實(shí)例4_4:鍵盤(pán)事件實(shí)例1 鍵盤(pán)事件也可以對(duì)輸入信息做合法性判斷,下面介紹對(duì)輸
13、入的年齡做判斷,小于200的認(rèn)為合法,否則認(rèn)為是不合法的年齡。4.5鍵盤(pán)事件OnKeyListener實(shí)例4_5:鍵盤(pán)事件實(shí)例2 游戲的的時(shí)候經(jīng)常會(huì)用到方向鍵來(lái)進(jìn)行控制,下面編程序?qū)@些鍵盤(pán)的按下和抬起做一些控制。4.6觸摸事件onTouchEvent 觸摸事件指的是當(dāng)用戶接觸到屏幕之后所產(chǎn)生的一種事件形式,當(dāng)用戶在屏幕上劃過(guò)時(shí),可以使用觸摸事件取得用戶當(dāng)前的坐標(biāo).OnTouchListener接口定義如下:public interface View.OnTouchListener public abstract boolean onTouch (View v, MotionEvent eve
14、nt) ;當(dāng)觸摸事件觸發(fā)之后自動(dòng)使用該接口中的方法public boolean onTouch(View v, MotionEvent event)進(jìn)行事件處理。4.6觸摸事件onTouchEvent 一般情況下以下三種情況的事件全部由onTouchEvent方法處理,只是三種情況中的動(dòng)作值不同。 屏幕被按下:當(dāng)屏幕被按下時(shí),會(huì)自動(dòng)調(diào)用該方法來(lái)處理事件,此時(shí)MotionEvent.getAction()的值為MotionEvent.ACTION_DOWN。 屏幕被抬起:當(dāng)觸控筆離開(kāi)屏幕時(shí)觸發(fā)的事件,MotionEvent.getAction()的值為MotionEvent.ACTION_UP時(shí)
15、,表示是屏幕被抬起的事件。 在屏幕中拖動(dòng):還負(fù)責(zé)處理觸控筆在屏幕上滑動(dòng)事件,調(diào)用MotionEvent.getAction()方法來(lái)判斷動(dòng)作值是否為MotionEvent. ACTION _MOVE 再進(jìn)行處理。4.6觸摸事件onTouchEvent觸摸事件的實(shí)現(xiàn)步驟:1)通過(guò)組件ID獲取組件實(shí)例;例如:this.edit = (EditText) super.findViewById(R.id.edit1);2)為該組件注冊(cè)O(shè)nTouchEvent Listener監(jiān)聽(tīng);例如:this.locate.setOnTouchListener(new OnTouchListenerImpl();3
16、)實(shí)現(xiàn)onTouchEvent方法。例如:public boolean onTouch (View v, MotionEvent event) 4.6觸摸事件onTouchEvent實(shí)例4_6:觸摸事件實(shí)例在屏幕任意空白處單擊、觸摸,會(huì)顯示出觸摸位置的坐標(biāo)。4.7 選擇改變事件OnCheckedChange 在RadioGroup、RadioButton(單選按鈕)、CheckBox等組件上也可以進(jìn)行事件的處理操作,當(dāng)用戶選中了某選項(xiàng)之后也將觸發(fā)相應(yīng)的監(jiān)聽(tīng)器進(jìn)行相應(yīng)地處理操作。 在Android中提供了選擇改變事件的處理操作,使用View.OnCheckedChangeListener接口進(jìn)行
17、選擇改變事件的處理操作。View指的RadioGroup組件或CheckBox組件。此接口定義如下:View.setOnCheckedChangeListener(new view.OnCheckedChangeListener() public void onCheckedChanged(View view, int checkedId) 4.7 選擇改變事件OnCheckedChange 選擇改變事件的實(shí)現(xiàn)步驟:1)通過(guò)組件ID獲取組件實(shí)例;例如:group = (RadioGroup)findViewById(R.id.radiogroup1); 2)為該組件注冊(cè)O(shè)nCheckedCha
18、ngeListener監(jiān)聽(tīng);如:group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener();3)實(shí)現(xiàn)onCheckedChanged方法。例如:public void onCheckedChanged(RadioGroup group, int checkedId) 4.7 選擇改變事件OnCheckedChange 實(shí)例4_7:選擇改變事件實(shí)例1 前面介紹了一個(gè)選擇題的實(shí)例,但是沒(méi)有對(duì)選擇的情況進(jìn)行正確或錯(cuò)誤的判斷,下面就來(lái)介紹對(duì)選擇的結(jié)果進(jìn)行正確或錯(cuò)誤的判斷。4.7 選擇改變事件OnCheckedCha
19、nge 實(shí)例4_8:選擇改變事件實(shí)例2 前面介紹了一個(gè)復(fù)選框的實(shí)例,但是沒(méi)有對(duì)選擇的結(jié)果進(jìn)行判斷或操作,下面就來(lái)介紹對(duì)這些選擇的結(jié)果進(jìn)行一些操作。4.8 選項(xiàng)選中事件OnItemSelected Spinner組件的主要功能是用于進(jìn)行下拉列表顯示的功能,當(dāng)用戶選中下拉列表中的某個(gè)選項(xiàng)之后可以使用Spinner類中提供的下面三個(gè)接口進(jìn)行相應(yīng)的處理操作:1、當(dāng)列表項(xiàng)被選中或者被單擊時(shí)觸發(fā)的事件setOnItemClickListener(AdapterView.OnItemClickListener listener);2、當(dāng)列表項(xiàng)改變時(shí)所觸發(fā)的事件setOnItemSelectedListene
20、r(AdapterView.OnItemSelectedListener listener)3、當(dāng)列表項(xiàng)被長(zhǎng)時(shí)間按住時(shí)所觸發(fā)的事件setOnItemLongClickListener(AdapterView.OnItemLongClickListener listener)當(dāng)事件觸發(fā)之后,自動(dòng)使用該接口中的public void onItemSelected()方法進(jìn)行事件處理。4.8 選項(xiàng)選中事件OnItemSelected 選項(xiàng)選中事件的實(shí)現(xiàn)步驟:1)通過(guò)組件ID獲取組件實(shí)例;例如:spin=(Spinner)findViewById(R.id.spin); 2)為該組件注冊(cè)監(jiān)聽(tīng);例如:s
21、pin.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() 3)實(shí)現(xiàn)onItemSelected方法。例如:public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) 4.8 選項(xiàng)選中事件OnItemSelected 實(shí)例4_9:選項(xiàng)選中事件實(shí)例1 前面介紹Spinner組件的基本屬性,沒(méi)有對(duì)選擇的結(jié)果進(jìn)行判斷或操作,下面就來(lái)介紹對(duì)這些選擇的結(jié)果進(jìn)行顯示。4.8 選項(xiàng)選中事件OnItemSelected 實(shí)例4_10:選項(xiàng)選中事
22、件實(shí)例2Spinner組件里面的選項(xiàng)一般是在程序中通過(guò)數(shù)組設(shè)置,或者是在布局管理器中設(shè)置好后再在程序中調(diào)用,下面介紹一種動(dòng)態(tài)添加或刪除Spinner組件里面的選項(xiàng)的方法。4.9 日期和時(shí)間監(jiān)聽(tīng)事件 日期選擇器組件 日期選擇器組件DatePicker是一個(gè)選擇年月日的日歷布局視圖,使用它可以對(duì)年、月、日進(jìn)行設(shè)置,它的層次關(guān)系如下:java.lang.Object android.view.View android.view.ViewGroup android.widget.FrameLayout android.widget.DatePicker要在Android 的java程序中使用DateP
23、icker組件必須要在程序中使用下面的語(yǔ)句。import android.widget.DatePicker; / 導(dǎo)入widget.DatePicker類4.9 日期和時(shí)間監(jiān)聽(tīng)事件 時(shí)間選擇器組件 時(shí)間選擇器組件TimePicker是用于選擇一天中時(shí)間的視圖,使用它可以進(jìn)行時(shí)間的調(diào)整,它的層次關(guān)系如下:java.lang.Object android.view.View android.view.ViewGroup android.widget.FrameLayout android.widget.TimePicker要在Android 的java程序中使用TimePicker組件必須要在程
24、序中使用下面的語(yǔ)句。import android.widget.TimePicker; / 導(dǎo)入widget.TimePicker類4.9 日期和時(shí)間監(jiān)聽(tīng)事件 方法描述public Integer getCurrentHour()返回當(dāng)前設(shè)置的小時(shí)public Integer getCurrentMinute()返回當(dāng)前設(shè)置的分鐘public boolean is24HourView()判斷是否是24小時(shí)制public void setCurrentHour(Integer currentHour)設(shè)置當(dāng)前的小時(shí)數(shù)public void setCurrentMinute(Integer cur
25、rentMinute)設(shè)置當(dāng)前的分鐘public void setEnabled(boolean enabled)設(shè)置是否可用public void setIs24HourView(Boolean is24HourView)設(shè)置時(shí)間為24小時(shí)制public int getYear()取得設(shè)置的年public void setOnTimeChangedListener (TimePicker.OnTimeChangedListener onTimeChangedListener)設(shè)置時(shí)間調(diào)整事件的回調(diào)函數(shù)public int getYear ()取得設(shè)置的年份public int getMont
26、h() 取得設(shè)置的月public int getDayOfMonth()取得設(shè)置的日public void setEnabled(boolean enabled)設(shè)置組件是否可用public void updateDate(int year, int monthOfYear, int dayOfMonth)設(shè)置一個(gè)指定的日期public void init (int year, int monthOfYear, int dayOfMonth,DatePicker. OnDateChangedListener onDateChangedListener)初始化狀態(tài)(初始化年月日)4.9 日期和時(shí)
27、間監(jiān)聽(tīng)事件 實(shí)例4_11:DatePicker和TimePicker組件使用實(shí)例 利用DatePicker和TimePicker組件顯示系統(tǒng)的日期和時(shí)間。4.9 日期和時(shí)間監(jiān)聽(tīng)事件 4.9.3 日期和時(shí)間的設(shè)置 DatePicker和TimePicker可以顯示當(dāng)前的系統(tǒng)日期和時(shí)間,要進(jìn)行日期和時(shí)間的設(shè)置Android提供了日期對(duì)話框DatePickerDialog以及時(shí)間對(duì)話框TimePickerDialog.方法描述public DatePickerDialog (Context context, DatePickerDialog.OnDateSetListener callBack, i
28、nt year, int monthOfYear, int dayOfMonth)創(chuàng)建DatePickerDialog對(duì)象,同時(shí)指定監(jiān)聽(tīng)操作、要設(shè)置的年、月、日等信息public void updateDate (int year, int monthOfYear, int dayOfMonth)更新顯示組件上的年、月、日信息public TimePickerDialog (Context context, TimePickerDialog.OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)創(chuàng)
29、建時(shí)間對(duì)話框,同時(shí)設(shè)置時(shí)間改變的事件操作、小時(shí)、分以及是否是24小時(shí)制public void updateTime (int hourOfDay, int minutOfHour)更新時(shí)、分4.9 日期和時(shí)間監(jiān)聽(tīng)事件 實(shí)例4_12:日期和時(shí)間的設(shè)置實(shí)例 利用DatePickerDialog和TimePickerDialog組件設(shè)置系統(tǒng)的日期和時(shí)間。4.9 日期和時(shí)間監(jiān)聽(tīng)事件 實(shí)例4_12:日期和時(shí)間的設(shè)置實(shí)例設(shè)置完畢,單擊“set”,出現(xiàn)如圖所示。4.9 日期和時(shí)間監(jiān)聽(tīng)事件 4.9.4 日期和時(shí)間監(jiān)聽(tīng)事件當(dāng)日期和時(shí)間發(fā)生變化時(shí)也可以進(jìn)行事件的觸發(fā),Android提供了日期、時(shí)間監(jiān)聽(tīng)器接口來(lái)實(shí)現(xiàn)
30、日期和時(shí)間監(jiān)聽(tīng)事件。日期監(jiān)聽(tīng)器接口定義如下:View.setOnDateChangedListener(new OnDateChangedListenerImpl();事件觸發(fā)之后,自動(dòng)使用該接口中的public void onDateChanged()方法進(jìn)行事件處理。時(shí)間監(jiān)聽(tīng)器接口定義如下:View.setOnTimeChangedListener(new OnTimeChangedListenerImpl(); 事件觸發(fā)之后,自動(dòng)使用該接口中的public void onTimeChanged()方法進(jìn)行事件處理。4.9 日期和時(shí)間監(jiān)聽(tīng)事件 日期和時(shí)間監(jiān)聽(tīng)事件的實(shí)現(xiàn)步驟,以時(shí)間監(jiān)聽(tīng)事件為
31、例進(jìn)行介紹:1)通過(guò)組件ID獲取組件實(shí)例;例如:time = (DatePicker) super.findViewById(R.id.time);2)為該組件注冊(cè)監(jiān)聽(tīng);例如:time.setOnTimeChangedListener(new OnTimeChangedListenerImpl(); 3)實(shí)現(xiàn)onTimeChanged方法。例如:public void onTimeChanged(TimePicker view, int hourOfDay, int minute) 4.9 日期和時(shí)間監(jiān)聽(tīng)事件 實(shí)例4_13:日期和時(shí)間監(jiān)聽(tīng)事件實(shí)例 利用DatePickerDialog和Time
32、PickerDialog組件設(shè)置系統(tǒng)的日期和時(shí)間。4.10 菜單事件 菜單是應(yīng)用程序中非常重要的組成部分,能夠在不占用界面空間的前提下,為應(yīng)用程序提供了統(tǒng)一的功能和設(shè)置界面,并為程序開(kāi)發(fā)人員提供了易于使用的編程接口。在Android手機(jī)上有一個(gè)“Menu”的鍵,當(dāng)選擇之后會(huì)在屏幕的底部顯示系統(tǒng)的菜單。Android系統(tǒng)支持三種菜單:選項(xiàng)菜單(OptionsMenu)、上下文菜單(ContextMenu)和子菜單(SubMenu)。Android系統(tǒng)系統(tǒng)提供了豐富的菜單操作方法,創(chuàng)建菜單在Android中不復(fù)雜。 4.10 菜單事件 4.10.2 選項(xiàng)菜單OptionsMenu 選項(xiàng)菜單是一種經(jīng)
33、常被使用的Android系統(tǒng)菜單,也是用戶在使用手機(jī)時(shí)最常見(jiàn)的一種形式。選項(xiàng)菜單通過(guò)“菜單鍵”(MENU)打開(kāi)。選項(xiàng)菜單分為:圖標(biāo)菜單(Icon Menu)和擴(kuò)展菜單(Expanded Menu)。 圖標(biāo)菜單能夠同時(shí)顯示文字和圖標(biāo)的菜單,不支持單選框和復(fù)選框,在一個(gè)菜單之中最多只會(huì)顯示6個(gè)菜單項(xiàng)(MenuItem),如果菜單項(xiàng)超出了6個(gè),則超出部分會(huì)自動(dòng)隱藏,而且會(huì)自動(dòng)出現(xiàn)一個(gè)“More”菜單項(xiàng)提示用戶,點(diǎn)擊More才出現(xiàn)第六項(xiàng)以及以后的菜單項(xiàng),這些菜單項(xiàng)被稱作擴(kuò)展菜單,擴(kuò)展菜單是垂直的列表型菜單,不能夠顯示圖標(biāo),支持單選框和復(fù)選框。4.10 菜單事件 在OptionsMenu中常用到如下幾個(gè)
34、操作方法:1、public boolean onCreateOptionsMenu(Menu menu):設(shè)置多個(gè)菜單項(xiàng)(MenuItem);如果要實(shí)現(xiàn)選項(xiàng)菜單,需要重載Activity的onCreateOptionMenu()函數(shù),才能夠?qū)崿F(xiàn),返回true則顯示菜單,返回false則不顯示菜單。例如:public boolean onCreateOptionsMenu(Menu menu) / 顯示菜單 menu.add(Menu.NONE, / 菜單不分組Menu.FIRST + 1, / 菜單項(xiàng)ID 5, / 菜單編號(hào) 郵件) / 顯示顯示標(biāo)題.setIcon(android.R.dra
35、wable. sym_action_email); / 設(shè)置顯示圖標(biāo) return true; /函數(shù)的返回值,值為true顯示設(shè)置的菜單,否則不能夠顯示其中Menu.FIRST是常量,值為1。sym_action_email 是Android 自帶圖標(biāo)庫(kù) android.R.drawable中的圖標(biāo),在這個(gè)庫(kù)中含有大量的常用圖標(biāo)。4.10 菜單事件 4.10.2 選項(xiàng)菜單OptionsMenu如上面所示,使用setIcon()函數(shù)設(shè)置顯示的圖標(biāo),也可以使用setShortcut()函數(shù)添加菜單子項(xiàng)的快捷鍵。例如:menu.add(Menu.NONE, Menu.FIRST + 2, 3, 保
36、存) /添加選項(xiàng)保存.setShortcut(3,s); /添加快捷鍵s和3setShortcut中用兩個(gè)參數(shù)來(lái)設(shè)定兩個(gè)快捷鍵是為了應(yīng)對(duì)不同的手機(jī)鍵盤(pán)。第一個(gè)參數(shù):數(shù)字快捷鍵為12鍵鍵盤(pán)(09,*,#,共12個(gè)按鍵),第二個(gè)參數(shù):全鍵盤(pán)。任何鍵不區(qū)分大小寫(xiě)。4.10 菜單事件 2、public boolean onOptionsItemSelected(MenuItem item):判斷菜單項(xiàng)的操作,該函數(shù)能夠處理菜單選擇事件,每次點(diǎn)擊菜單子項(xiàng)時(shí)都會(huì)被調(diào)用,下面的代碼說(shuō)明了如何通過(guò)菜單子項(xiàng)的子項(xiàng)ID執(zhí)行不同的操作。public boolean onOptionsItemSelected(Men
37、uItem item) switch (item.getItemId() / 判斷菜單項(xiàng)IDcase Menu.FIRST + 1: / ID為FIRST + 1時(shí) / 選中該項(xiàng)就增加1 MenuemailCounter=MenuemailCounter+1; Toast.makeText(this, 您選擇的是“郵件菜單”項(xiàng)。, Toast.LENGTH_LONG).show(); / 顯示選中的選項(xiàng)名break; / 退出case Menu.FIRST + 2: return false; / 返回falseonOptionsItemSelected ()的返回值表示是否對(duì)菜單的選擇事件進(jìn)
38、行處理,如果已經(jīng)處理過(guò)則返回true,否則返回false。4.10 菜單事件 3、public boolean onPrepareOptionsMenu(Menu menu):在菜單顯示前觸發(fā)此操作;重載onPrepareOptionsMenu()函數(shù),能夠動(dòng)態(tài)的添加、刪除菜單子項(xiàng),或修改菜單的標(biāo)題、圖標(biāo)和可見(jiàn)性等內(nèi)容,函數(shù)返回值為true則繼續(xù)調(diào)用onCreateOptionsMenu()方法,反之則不再調(diào)用。下面的代碼是在用戶每次打開(kāi)選項(xiàng)菜單時(shí),在菜單子項(xiàng)中顯示用戶打開(kāi)該子項(xiàng)的次數(shù)。static int MenuemailCounter = 0; /統(tǒng)計(jì)選項(xiàng)選中的計(jì)數(shù)器public boo
39、lean onPrepareOptionsMenu(Menu menu) / 獲得Menu.FIRST + 1項(xiàng) MenuItem emailItem = menu.findItem(Menu.FIRST + 1); emailItem.setTitle(郵件選項(xiàng): +String.valueOf(MenuemailCounter); / 設(shè)置郵件標(biāo)題為“郵件選項(xiàng)”與MenuemailCounter的組合。4.10 菜單事件 4、public void onOptionsMenuClosed(Menu menu):當(dāng)菜單關(guān)閉時(shí)觸發(fā)此操作;例如:/ 菜單退出時(shí)調(diào)用public void onOp
40、tionsMenuClosed(Menu menu) Toast.makeText(this, 注意,選項(xiàng)現(xiàn)在菜單關(guān)閉!, Toast.LENGTH_LONG).show();4.10 菜單事件 5、如果希望從配置文件之中取出數(shù)據(jù),需要使用到下面兩個(gè)常用方法。public MenuInflater(Context context) /創(chuàng)建MenuInflater類對(duì)象public void inflate(int menuRes, Menu menu) /將配置的資源填充到菜單之中inflater在Android中建立了從資源文件到對(duì)象的橋梁,MenuInflater即把菜單xml資源轉(zhuǎn)換為對(duì)
41、象并添加到menu對(duì)象中,它可以通過(guò)activity的getMenuInflater()得到。在MainActivity中重寫(xiě)onCreateOptionsMenu(.)方法。public boolean onCreateOptionsMenu(Menu menu) MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mainmenu, menu); return true;4.10 菜單事件 實(shí)例4_14:選項(xiàng)菜單實(shí)例4.10 菜單事件 4.10.3 上下文菜單ContextMenu上下文菜單ContextMe
42、nu也稱為快捷菜單,類似于windows系統(tǒng)中的右鍵菜單,不過(guò)Android是通過(guò)長(zhǎng)按(按住不動(dòng)約兩秒鐘)某個(gè)組件來(lái)彈出上下文菜單的,上下文菜單項(xiàng)不支持圖標(biāo)或快捷鍵。4.10 菜單事件 要進(jìn)行上下文菜單的操作有幾個(gè)常用的方法:1、將快捷菜單注冊(cè)到界面控件上,注冊(cè)后長(zhǎng)按就會(huì)彈出上下文菜單;public void registerForContextMenu(View v,);2、設(shè)置需要顯示的所有菜單項(xiàng); public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo);其中
43、參數(shù)menu是需要顯示的快捷菜單,參數(shù)v是用戶選擇的界面元素,參數(shù)menuInfo是所選擇界面元素的額外信息。3、當(dāng)某一個(gè)菜單項(xiàng)被選中時(shí)觸發(fā)此操作; public boolean onContextItemSelected(MenuItem item);4、當(dāng)菜單項(xiàng)關(guān)閉時(shí)觸發(fā)此操作。public void onContextMenuClosed(Menu menu);5、menu.add4.10 菜單事件 上下文菜單實(shí)現(xiàn)步驟:1、通過(guò)組件ID獲取組件實(shí)例,注冊(cè)。例如:TextView txt = (TextView) this.findViewById(R.id.txt1);this.regi
44、sterForContextMenu(txt) ;/將快捷菜單注冊(cè)到txt組件上2、為該組件注冊(cè)onCreateContextMenuListener監(jiān)聽(tīng)。public void onCreateContextMenu(ContextMenu menu, View txt, ContextMenu.ContextMenuInfo menuInfo) / 顯示菜單super.onCreateContextMenu(menu, txt, menuInfo) ;menu.setHeaderTitle(信息操作) ; / 設(shè)置顯示信息頭menu.add(Menu.NONE, Menu.FIRST +
45、1, 1, 添加信息);/ 設(shè)置菜單項(xiàng)menu.add(Menu.NONE, Menu.FIRST + 2, 2, 查看信息);menu.add(Menu.NONE, Menu.FIRST + 3, 3, 刪除信息); menu.add(Menu.NONE, Menu.FIRST + 4, 4, 信息另存);menu.add(Menu.NONE, Menu.FIRST + 5, 5, 編輯信息); 4.10 菜單事件 3、有列表操作,就該有相應(yīng)的事件。上面的事件一般會(huì)與下面方法結(jié)合使用實(shí)現(xiàn)onCreateContextMenu方法。public boolean onContextItemSelected(MenuItem item) / 選中某個(gè)菜單項(xiàng)switch (item.getItemId() / 判斷菜單項(xiàng)IDcase Menu.FIRST + 1:Toast.makeText(this, 您選擇的是“添加信息”。, Toast.LENGTH_LONG).show();break;case Menu.FIRST + 2:Toast.makeText(this, 您選擇的是“查看信息”。, Toast.LENGTH_LONG).show();break;case Menu.FIR
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《知識(shí)產(chǎn)權(quán)培訓(xùn)》課件
- 《種釀酒白葡萄》課件
- 《診斷原則》課件
- 單位管理制度集合大全【人員管理】
- 單位管理制度合并選集員工管理篇
- 單位管理制度分享合集【員工管理篇】十篇
- 單位管理制度分享大合集【員工管理篇】
- 單位管理制度范例匯編【員工管理】十篇
- 七年級(jí)英語(yǔ)SpringFestival課件
- 單位管理制度呈現(xiàn)大全【員工管理篇】
- 指揮中心 施工方案
- 金融模擬交易實(shí)驗(yàn)報(bào)告
- 國(guó)家開(kāi)放大學(xué)電大本科《古代小說(shuō)戲曲專題》2023期末試題及答案(試卷號(hào):1340)
- 加德納多元智能理論教學(xué)課件
- 北師大版數(shù)學(xué)八年級(jí)上冊(cè)全冊(cè)教案
- 現(xiàn)代文閱讀之散文
- 從業(yè)人員在安全生產(chǎn)方面的權(quán)利和義務(wù)
- 新開(kāi)模具清單
- 抗菌藥物臨床應(yīng)用指導(dǎo)原則(2023年版)
- 2023年軍政知識(shí)綜合題庫(kù)
- 2023-2024學(xué)年福建省福州市小學(xué)語(yǔ)文 2023-2024學(xué)年六年級(jí)語(yǔ)文期末試卷期末評(píng)估試卷
評(píng)論
0/150
提交評(píng)論