1. 程式人生 > >Android學習筆記(36):Android的兩種事件處理方式

Android學習筆記(36):Android的兩種事件處理方式

post gravity cal log 基於 處理方法 hang mil 重寫

Android提供了兩種事件處理的方式:基於回調的事件處理 和 基於監聽的事件處理。

我們來說的easy理解一點:

1)基於回調的事件處理就是繼承GUI組件,並重寫該組件的事件處理方法。除了一些特定的情況,大部分情況使用基於回調的事件處理方式並非最好的選擇。

2)基於監聽的事件處理就是在監聽器中定義事件的處理方式,再為組件綁定監聽器。

這樣的方式無疑是更可以體現面向對象思想的。

基於回調的事件處理:

View類包括例如以下的方法能夠用於重寫:

boolean onKeyDown(int keyCode,KeyEvent event):按下某個按鍵時觸發

boolean onKeyUp(int keyCode,KeyEvent event):松開某個按鍵時觸發

boolean onKeyLongPress(int keyCode,KeyEvent event):長按某個按鍵時觸發

boolean onKeyShortcut(int keyCode,KeyEvent event):按下某個快捷鍵時觸發

boolean onTouchEvent(MotionEvent event):觸摸屏幕時觸發

我們註意到返回值都是一個boolean值。這用於標識該方法是否能全然處理該事件。返回true表示能全然處理,事件不會傳播出去,返回false表示不能全然處理,事件會傳播出去。交給以下的事件處理方法處理。


基於監聽的事件處理:

這是一種委派式的事件處理方式:普通組件(事件源)將事件處理托付給(綁定)事件監聽器,事件源發生指定的事件時。通知事件監聽器來處理該事件。

下圖展示的是基於監聽的事件處理流程圖:

技術分享


了解下以下這幾種概念:

事件源:就是各種GUI組件。

事件監聽器:各種XxxListener類。須要實現事件處理方法的接口。

註冊監聽器:調用事件源的setXxxListener(XxxListener)方法。

View包括例如以下幾個內部接口:

View.OnClickListener:處理單擊事件

View.OnCreateContextMenuListener:處理單擊上下文菜單項的事件

View.onFocusChangeListener:處理焦點改變事件

View.OnKeyListener:處理按鍵事件

View.OnLongClickListener:處理長按事件

View.OnTouchListener:處理觸摸事件

一個事件監聽器能夠被多個GUI組件所共用。

實現事件監聽器能夠有例如以下幾種形式:

內部類、外部類、Activity本身實現,匿名內部類、直接綁定到標簽(這是特殊但非常方便的形式)。

這各種實現假設熟悉Java的話,實現都是不難的。

Android學習筆記(36):Android的兩種事件處理方式