Android 事件分發機制

jopen 10年前發布 | 47K 次閱讀 Android Android開發 移動開發

假設場景:一個layout中包含一個button控件,layout注冊了onTouch()事件,button注冊onClick()事件,當點擊這個button時,是先觸發布局的onTouch()呢,還是先觸發按鈕的onClick()事件呢?

測試表明:布局先得到了這個事件。

默認情況下:它會把該事件傳遞給子控件----Button;Button如果處理了該事件(例如頁面跳轉),那這次點擊事件就到此結束了;如果Button不做處理(什么事都沒發生),事件會返還給父控件----Layout,由Layout決定是否自己消費該事件,如果父控件處理了,點擊事件結束;如果父控件也沒有處理,事件丟棄,點擊事件結束。這是默認情況下的流程,那特殊情況下呢?

特殊情況下:父控件會把事件攔截(通過onInterceptTouchEvent()方法的返回值確定是否攔截,返回true 攔截;返回false 分發給子控件),自己處理或丟棄,子控件根本就不知道這次點擊的發生。

簡易流程如下:

        點擊事件發生后,父控件優先獲取,如果父控件攔截了(處理或丟棄),子控件無法獲取事件;如果父控件分發了,子控件可以處理或丟棄,如果是處理,整個事件結束;如果是丟棄,事件又被拋給父控件,讓父控件處理或丟棄。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!