Android 事件處理

2021-06-26 07:17:06 字數 1693 閱讀 5392

view 提供了若干事件.

在渲染 布局 展現 相關事件的觸發順序總結如下

constructors

onfinishinflate() 當view和它的所有子物件從xml中匯入之後,呼叫此方法

layout

onmeasure(int, int) view會呼叫此方法,來確認自己及所有子物件的大小

onlayout(boolean, int, int, int, int, int, int) 當view要為所有子物件分配大小和位置時,呼叫此方法

onsizechanged(int, int, int, int) 當view大小改變時,呼叫此方法

drawingondraw(canvas) 當view要繪製它的內容時,呼叫此方法

event processingonkeydown(int, keyevent) 當乙個新的按鍵事件發生時,呼叫此方法

onkeyup(int, keyevent) 當乙個按鍵釋放事件發生時,呼叫此方法

onmotionevent(motionevent) 當乙個動作事件(如觸控)發生時,呼叫此方法

focus

onfocuschanged(boolean, int) 當view獲得或失去焦點時,呼叫此方法

attachingonattachedtowindow() 當view附加到乙個窗體上時,呼叫此方法

ondetachedfromwindow() 當view離開它的窗體時,呼叫此方法

當你為乙個 activty 新增乙個可見的 view, 並且執行這個activty時,android通常情況下會自動按照下列順序來觸發view的相關事件

onattachedtowindow

onmeasure

onsizechanged

onlayout

ondraw 

touchevent 中,返回值是 true ,則說明消耗掉了這個事件,返回值是 false ,則沒有消耗掉,會繼續傳遞下去,這個是最基本的。

在 view 中跟 touch 相關的事件有 dispatchtouchevent , intercepttouchevnet , ontouchevent 三種。 dispatchtouchevent 是負責分發事件的,事件從 activity 傳遞出來之後,最先到達的就是最頂層 view 的 dispatchtouchevent ,然後它進行分發,如果返回 false ,則交給這個 view 的 intercepttouchevent 方法來決定是否要攔截這個事件,如果 intercepttouchevent 返回 true ,也就是攔截掉了,則交給它的 ontouchevent 來處理,如果 intercepttouchevent 返回 false ,那麼就傳遞給子 view ,由子 view 的 dispatchtouchevent 再來開始這個事件的分發。

如果事件傳遞到某一層的子 view 的 ontouchevent 上了,這個方法返回了 false ,那麼這個事件會從這個 view 往上傳遞,都是 ontouchevent 來接收。而如果傳遞到最上面的 ontouchevent 也返回 false 的話,這個事件就會「消失」,而且接收不到下一次事件。(我說的一次事件指的是 down 到 up 之間的一系列事件)

參考文件:

Android事件處理

按鍵捕獲先後順序 驅動層 系統層 library層 框架層 應用層。應用層return false,事件會繼續向底層傳遞。應用層return true,事件終止不再傳遞。呼叫super方法,activity會決定事件處理方式以及是否向底層傳輸。return false和return true會導致按...

android事件處理機制

談到android事件處理,最複雜的就是對touch事件的處理,因為touch事件包括 down,move,up,cancle和多點觸控等多種情況,多點觸控的情況先不討論,因為touch有這麼多的狀態,所以touch相對來說是最難處理的,下面就來討論一下android系統是如何處理touch事件的 ...

Android的事件處理2

handler 它的作用有兩個 傳送訊息和處理訊息,程式使用handler傳送訊息,由handler傳送的訊息必須被送到指定的messagequeue。也就是說希望handler正常工作,必須在當前執行緒中有乙個messagequeue 否則訊息就沒有messagequeue進行儲存了。不過mess...