Android事件接聽程式是視圖View類的介面,包含一個單獨的回調方法。這些方法將在視圖中註冊的接聽程式被使用者介面操作觸發時由Android架構調用。回調方法被包含在Android事件接聽程式介面中:
例如,Android 的view 對象都含有一個命名為 OnClickListener 介面成員變數,使用者的點擊操作都會交給 OnClickListener的 OnClick() 方法進行處理。
開發人員若需要對點擊事件做處理,可以定義一個 OnClickListener 介面對象,賦給需要被點擊的 view的介面成員變數OnClickListener,一般是用 view 的setOnClickListener() 函數來完成這一操作。當有使用者點擊事件時,系統就會回調被點擊view的OnClickListener介面成員的OnClick()方法。
執行個體(對於Android介面上Button點擊事件監聽的類比):
1.定義介面public interface OnClickListener { public void OnClick(Button b); }2. 定義Buttonpublic class Button { OnClickListener listener; public void click() { listener.OnClick(this); } public void setOnClickListener(OnClickListener listener) { this.listener = listener; }}3. 將介面對象OnClickListener 賦給 Button的介面成員public class Activity { public Activity() { } public static void main(String[] args) { Button button = new Button(); button.setOnClickListener(new OnClickListener(){ @Override public void OnClick(Button b) { System.out.println("clicked"); } }); button.click(); //user click,System call button.click(); }}
下面是一些常用的Android事件監聽器介面中常用的回調方法
onClick()
包含於View.OnClickListener。當使用者觸摸這個item(在觸摸模式下),或者通過瀏覽鍵或跟蹤球聚焦在這個item上,然後按下“確認”鍵或者按下跟蹤球時被調用。
onLongClick()
包含於View.OnLongClickListener。當使用者觸摸並控制住這個item(在觸摸模式下),或者通過瀏覽鍵或跟蹤球聚焦在這個item上,然後保持按下“確認”鍵或者按下跟蹤球(一秒鐘)時被調用。
onFocusChange()
包含於View.OnFocusChangeListener。當使用者使用瀏覽鍵或跟蹤球瀏覽進入或離開這個item時被調用。
onKey()
包含於View.OnKeyListener。當使用者聚焦在這個item上並按下或釋放裝置上的一個按鍵時被調用。
onTouch()
包含於View.OnTouchListener。當使用者執行的動作被當做一個觸摸事件時被調用,包括按下,釋放,或者螢幕上任何的移動手勢(在這個item的邊界內)。
onCreateContextMenu()
包含於View.OnCreateContextMenuListener。當正在建立一個操作功能表的時候被調用(作為持續的“長點擊”動作的結果)。參閱建立菜單Creating Menus章節以擷取更多資訊。
注意:
這些回呼函數中onClick()回調沒有傳回值,但是一些其它回調方法必須返回一個布爾值。
onLongClick()
返回true 表示你已經處理了這個事件而且到此為止;返回false 表示你還沒有處理它和/或這個事件應該繼續交給其他on-click接聽程式。
onKey()
返回true 表示你已經處理了這個事件而且到此為止;返回false 表示你還沒有處理它和/或這個事件應該繼續交給其他on-key接聽程式。
onTouch()
返回一個布爾值來指示你的接聽程式是否已經消費了這個事件。重要的是這個事件可以有多個彼此跟隨的動作。因此,如果當接收到向下動作事件時你返回false,那表明你還沒有消費這個事件而且對後續動作也不感興趣。那麼,你將不會被該事件中的其他動作調用,比如手勢或最後出現向上動作事件。
按鍵事件總是遞交給當前焦點所在的視圖。它們從視圖層次的頂層開始被分發,然後依次向下,直到到達恰當的目標。如果你的視圖(或者一個子視圖)當前擁有焦點,那麼你可以看到事件經由dispatchKeyEvent()方法分發。除了從你的視圖截獲按鍵事件,還有一個可選方案,你還可以在你的活動中使用onKeyDown()
and onKeyUp()來接收所有的事件。