




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第3章 Android的事件處理3.1 事件處理概述 Android提供兩套了事件處理機制:提供兩套了事件處理機制: a、基于、基于監聽器監聽器的的事件處理:主要做法就是為的的事件處理:主要做法就是為Android界面組件綁定特定的事件監聽器。界面組件綁定特定的事件監聽器。 b、基于、基于回調回調的事件處理:主要做法是重寫的事件處理:主要做法是重寫Android組件特定的回調方法,或者重寫組件特定的回調方法,或者重寫Activity的回調方法。的回調方法。Android為絕大部分組件都提供了事為絕大部分組件都提供了事件響應的回調方法。件響應的回調方法。3.2 基于監聽器的事件處理 事件監聽的處
2、理模型中,主要涉及三類對象:事件監聽的處理模型中,主要涉及三類對象: a、事件源事件源(EventSource):事件發生的場所,):事件發生的場所,通常就是各個組件,例如按鈕、窗口、菜單等。通常就是各個組件,例如按鈕、窗口、菜單等。 b、事件事件(Event):事件封裝了界面組件上發生):事件封裝了界面組件上發生的特定事件(通常就是一次用戶操作)。如果程序的特定事件(通常就是一次用戶操作)。如果程序需要獲得界面組件上所發生事件的相關信息,一般需要獲得界面組件上所發生事件的相關信息,一般通過通過Event對象來取得。對象來取得。 c、事件監聽器事件監聽器(EventListener):負責監聽
3、事):負責監聽事件源所發生的事件,并對各種事件做出相應的響應件源所發生的事件,并對各種事件做出相應的響應。 實例實例 codes033.2EventQs 在在public void onClick(View v)參數中,只有事參數中,只有事件源,而沒有事件,對于復雜事件,則需要傳遞件源,而沒有事件,對于復雜事件,則需要傳遞事件信息,如鍵盤事件、觸摸事件。事件信息,如鍵盤事件、觸摸事件。 實例:控制飛機移動實例:控制飛機移動 codes033.2Plane/ / 去掉窗口標題去掉窗口標題requestWindowFeature(Window.FEATURE_NO_TITLE); /support
4、RequestWindowFeature/ / 全屏顯示全屏顯示getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);/ / 定義飛機圖片定義飛機圖片plane = BitmapFactory.decodeResource(context.getResources(), R.drawable.plane);/獲得屏幕寬和高獲得屏幕寬和高WindowManager windowManager = getWindowManager();
5、Display display = windowManager.getDefaultDisplay();DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics(metrics);/KEYCODE判斷: KeyEvent.KEYCODE_W/設置可以獲取焦點 setFocusable(true); Android為不同的界面組件提供了不同的監聽器為不同的界面組件提供了不同的監聽器接口,通常以內部類的形式存在,以接口,通常以內部類的形式存在,以View為例:為例: 在程序中實現事件監聽器,通常有如下幾種形式在程序中實現事件
6、監聽器,通常有如下幾種形式: 內部類內部類 外部類外部類 Activity本身作為事件監聽器類本身作為事件監聽器類 匿名內部類形式匿名內部類形式3.2.4 外部類作為事件監聽器類 使用外部類形式比較少見,原因:使用外部類形式比較少見,原因: 事件監聽器通常屬于特定的事件監聽器通常屬于特定的GUI界面,定義成外部界面,定義成外部類不利于提高程序的內聚性類不利于提高程序的內聚性 外部類不能自由訪問外部類不能自由訪問GUI界面的類中的組件,編程界面的類中的組件,編程不夠簡潔不夠簡潔 但如果某個事件監聽器需要被多個但如果某個事件監聽器需要被多個GUI界面所共界面所共享,則可以考慮使用外部類形式。享,則
7、可以考慮使用外部類形式。 實例:長按后發送短信實例:長按后發送短信 codes033.2SendSms/ / 獲取短信管理器獲取短信管理器SmsManager smsManager = SmsManager.getDefault();/ 創建發送短信的創建發送短信的PendingIntentPendingIntent sentIntent = PendingIntent.getBroadcast(act , 0, new Intent(), 0);/ 發送文本短信發送文本短信smsManager.sendTextMessage(addressStr, null, contentStr , se
8、ntIntent, null); 在在androidmanifest.xml文件中配置權限:文件中配置權限: 3.2.5 Activity本身作為監聽器本身作為監聽器 不太常見,容易造成程序結構混亂。不太常見,容易造成程序結構混亂。 實例:實例:codes033.2ActivityListener 3.2.6 匿名類匿名類 實例:實例: codes033.2AnonymousListener 3.2.7 綁定到標簽綁定到標簽 實例:實例: codes033.2BindingTag3.3 基于回調的事件處理 在回調機制中,當用戶組在回調機制中,當用戶組GUI組件上激發某個事組件上激發某個事件時,
9、組件自己特定的方法會處理該事件。件時,組件自己特定的方法會處理該事件。 為了使用回調機制處理事件,我們需要重寫該類為了使用回調機制處理事件,我們需要重寫該類的事件處理方法。的事件處理方法。3.3.1 回調機制與監聽機制 Android為所有的為所有的GUI組件提供了事件處理的回調組件提供了事件處理的回調方法,以方法,以View為例:為例: onKeyDown(int keyCode,KeyEvent event) onKeyLongPress(int keyCode,KeyEvent event) onKeyShortcut(int keyCode,KeyEvent event) onKeyU
10、p(int keyCode,KeyEvent event) onTouchEvent(MotionEvent event) onTrackballEvent(MotionEvent event) 實例:自定義實例:自定義Button重寫重寫onKeyDown codes033.3CallbackHandler 幾乎所有基于回調事件處理方法都有一個幾乎所有基于回調事件處理方法都有一個booleanboolean類的返回值,該返回值是用來表示處理類的返回值,該返回值是用來表示處理方法是否能完全處理該事件。方法是否能完全處理該事件。 如果返回的是如果返回的是truetrue,表示該事件已完全處理,不
11、會,表示該事件已完全處理,不會再傳播再傳播 如果返回的是如果返回的是falsefalse,表示該事件沒有完全處理,表示該事件沒有完全處理,需要繼續傳播需要繼續傳播 實例:事件從實例:事件從Button傳播到傳播到Activity codes033.3Propagationcodes033.3Propagation 當該組件上發生某個按鍵被按下的事件時,當該組件上發生某個按鍵被按下的事件時,AndroidAndroid系統最先觸發的應該是該按鍵上綁定的事系統最先觸發的應該是該按鍵上綁定的事件件監聽器監聽器,接著才觸發該組件提供的事件,接著才觸發該組件提供的事件回調方法回調方法,然后還會傳播到該組
12、件所在的,然后還會傳播到該組件所在的ActivityActivity3.3.3 重寫onTouchEvent將上一章將上一章“實例:跟隨手指的小球實例:跟隨手指的小球”改成基于回改成基于回調的實現調的實現 實例:實例: codes033.3CustomView3.4 響應系統設置的事件 在開發在開發Android應用時,有時候可能需要讓應用應用時,有時候可能需要讓應用程序隨系統設置而進行調整,比如判斷系統的屏程序隨系統設置而進行調整,比如判斷系統的屏幕方向、判斷系統方向的方向導航設備等幕方向、判斷系統方向的方向導航設備等3.4.1 Configuration類簡介 ConfigurationC
13、onfiguration類專門描述手機設備上的配置信類專門描述手機設備上的配置信息,這些配置信息既包括用戶特定的配置項,也息,這些配置信息既包括用戶特定的配置項,也包括系統的動態設備配置。包括系統的動態設備配置。 程序中可調用程序中可調用Activity的如下方法來獲取的如下方法來獲取Configuration對象對象/獲取系統的獲取系統的Configuration對象對象 Configuration cfg = getResources().getConfiguration(); 該對象的屬性代表的配置信息:該對象的屬性代表的配置信息: fontScale:獲取當前用戶設置的字體的縮放因子。
14、獲取當前用戶設置的字體的縮放因子。 keyboard:獲取當前設備所關聯的鍵盤類型。該屬性獲取當前設備所關聯的鍵盤類型。該屬性的返回值:的返回值:KEYBOARD_12KEY(只有只有1212個鍵的小鍵個鍵的小鍵盤)、盤)、KEYBOARD_NOKEYS、KEYBOARD_QWERTY(普通鍵盤)普通鍵盤) keyboardHidden:該屬性返回一個該屬性返回一個boolean值用于標識值用于標識當前鍵盤是否可用。該屬性不僅會判斷系統的硬件鍵盤當前鍵盤是否可用。該屬性不僅會判斷系統的硬件鍵盤,也會判斷系統的軟鍵盤(位于屏幕)。,也會判斷系統的軟鍵盤(位于屏幕)。 locale:獲取用戶當前的
15、獲取用戶當前的Locale. mcc:獲取移動信號的國家碼獲取移動信號的國家碼 mnc:獲取移動信號的網絡碼獲取移動信號的網絡碼 navigation:判斷系統上方向導航設備的類型。該屬性判斷系統上方向導航設備的類型。該屬性的返回值:的返回值:NAVIGATION_NONAV(無導航)、無導航)、NAVIGATION_DPAD(DPAD導航)導航) NAVIGATION_TRACKBALL(軌跡球導航)、軌跡球導航)、NAVIGATION_WHEEL(滾輪導航)滾輪導航) orientation:獲取系統屏幕的方向。該屬性的返回值:獲取系統屏幕的方向。該屬性的返回值:ORIENTATION_L
16、ANDSCAPE(橫向屏幕)、橫向屏幕)、ORIENTATION_PORTRAIT(豎向屏幕)豎向屏幕) touchscreen:獲取系統觸摸屏的觸摸方式。該屬性的獲取系統觸摸屏的觸摸方式。該屬性的返回值:返回值:TOUCHSCREEN_NOTOUCH(無觸摸屏)無觸摸屏)、TOUCHSCREEN_STYLUS(觸摸筆式觸摸屏)、觸摸筆式觸摸屏)、 TOUCHSCREEN_FINGER(接受手指的觸摸屏)接受手指的觸摸屏) 實例:獲取系統設備狀態實例:獲取系統設備狀態 codes033.4ConfigurationTest3.4.2 響應系統設置更改 Activity的的setRequeste
17、dOrientation方法可以方法可以修改屏幕方向。修改屏幕方向。 重寫重寫Activity的的onConfigurationChanged,可,可以響應系統設置更改。以響應系統設置更改。 實例:監聽屏幕方向改變實例:監聽屏幕方向改變 codes033.4ChangeCfg在在Activity中配置中配置configChanges屬性:屬性:android:configChanges=orientation|screenSize3.5 Handler消息傳遞機制 Handler是是Android操作系統中的線程通信工具操作系統中的線程通信工具消息消息Message Queue將消息發送到將消
18、息發送到消息隊列中消息隊列中將消息從消息隊將消息從消息隊列中取出處理列中取出處理 實例:自動播放動畫實例:自動播放動畫 codes033.5HandlerTest3.5.2 Handler工作原理 在主線程中向子線程(在主線程中向子線程(worker thread)發送消)發送消息:息:Looper.prepare(); mHandler = new Handler() public void handleMessage(Message msg) / process incoming messages here ; Looper.loop(); 實例:使用新線程計算質數實例:使用新線程計算質數
19、 codes033.5CalPrime3.6 異步任務 AsyncTask,是是android提供的輕量級的異步類提供的輕量級的異步類,可以直接繼承可以直接繼承AsyncTask,在類中實現異步操作在類中實現異步操作,并提供接口反饋當前異步執行的程度并提供接口反饋當前異步執行的程度(可以通過接可以通過接口實現口實現UI進度更新進度更新),最后反饋執行的結果給最后反饋執行的結果給UI主主線程線程. Android的的AsyncTask比比Handler更輕量級一些更輕量級一些,適用于簡單的異步處理。,適用于簡單的異步處理。 由于由于AsyncTask是一個抽象類,所以如果我們想是一個抽象類,所以
20、如果我們想使用它,就必須要創建一個子類去繼承它。在繼使用它,就必須要創建一個子類去繼承它。在繼承時我們可以為承時我們可以為AsyncTask類指定三個泛型參數類指定三個泛型參數,這三個參數的用途如下:,這三個參數的用途如下: 1 1)ParamsParams:啟動任務執行的輸入參數類型:啟動任務執行的輸入參數類型 2 2)ProgressProgress:后臺任務完成的進度值的類型:后臺任務完成的進度值的類型 3 3)ResultResult:后臺執行任務完成后返回結果的類型:后臺執行任務完成后返回結果的類型abstractclassAsyncTask實現AsyncTask實現步驟 1 1)創建)創建AsyncTask的子類,并為三個泛型參數指定類型的子類,并為三個泛型參數指定類型。如果某個泛型參數不需要指定類型,可將它指定為。如果某個泛型參數不需要指定類型,可將它指定為Void 2)根據需要,實現根據需要,實
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 在線醫療培訓平臺的設計與實現
- 探索數字化時代下的商業決策新模式
- 學術論文預印本企業制定與實施新質生產力項目商業計劃書
- 學科教材多版本印刷行業跨境出海項目商業計劃書
- 水粉水彩畫創作在線平臺企業制定與實施新質生產力項目商業計劃書
- 歌劇表演AI應用行業跨境出海項目商業計劃書
- 創意餐飲美食街行業深度調研及發展項目商業計劃書
- 天文學觀測指南行業深度調研及發展項目商業計劃書
- 瑜伽冥想教程行業跨境出海項目商業計劃書
- 民俗文化公益講座行業跨境出海項目商業計劃書
- DB32/T 4220-2022消防設施物聯網系統技術規范
- 車位轉讓合同協議書
- 合伙經營貨車輛協議書
- 2025年農村個人果園承包合同
- 湖北省武漢市2025屆高三年級五月模擬訓練試題數學試題及答案(武漢五調)
- 醫師掛證免責協議書
- 2025年數控技術專業畢業考試試題及答案
- 上海市2024年初中語文學業水平考試試卷真題(精校打印)
- 濟南民政離婚協議書
- 車牌租賃協議和抵押合同
- 2025年內蒙古自治區初中學業水平考試數學模擬試題 (一)(含答案)
評論
0/150
提交評論