android 事件傳遞機制:
【觸摸事件】
1:
onTouchEvent();觸摸事件
2:
dispatchTouchEvent(MotionEvent)分發事件
3:onInterceptTouchEvent() 攔截事件
onTouchEvent()------->view-----------》
dispatchTouchEvent若是
dispatchTouchEvent返回true,那麼
view的
onTouchEvent()處理事件,若是返回false,那麼看
onInterceptTouchEvent(),若是
onInterceptTouchEvent()返回ture仍是
view的
onTouchEvent()處理事件,若是返回false則交給view的子view
dispatchTouchEvent進行再次分發,依次類推;
注:
1:onInterceptTouchEvent()是rootiew向下傳遞,
onTouchEvent()恰好相反;
【
按鍵事件】
Android按鍵事件處理主要在View和Activity兩個級別。和
觸摸事件
相比,簡單不少。
按鍵事件的處理機制:
一、默認狀況下,若是沒有View得到焦點,事件將傳遞給Activity處理。
二、若是View得到焦點(
View.SetFocusable(true)
),事件首先傳遞到View的回調方法中。view回調方法返回false,事件繼續傳遞到Activity處理。反之,事件不會繼續傳遞。
注:
一、按鍵的onKeyDown和onKeyUp是相互獨立的,不會相互影響。
二、不管是View仍是Activity中,建議重寫事件回調方法時,只對處理過的按鍵返回true,沒有處理的事件應該調用其父類方法。
不然,其餘未處理事件不會被傳遞到合適的目標組件中,例如:Back按鍵失效問題。