淺析Android KeyEvent事件分發(fā)流程

Android里面KeyEvent事件在TV開(kāi)發(fā)時(shí)經(jīng)常都需要接觸到,作為交互設(shè)備如遙控器、手柄等和Android UI交互時(shí)都是通過(guò)KeyEvent事件。

下面來(lái)講一下KeyEvent的分發(fā)流程。

為了加深理解,建一個(gè)demo工程。布局文件如下圖所示:


View1、View2、View3是我分別繼承RelativeLayout寫的三個(gè)布局,模擬平時(shí)開(kāi)發(fā)時(shí)的各種ViewGroup。最頂層的Button模擬平時(shí)獲取焦點(diǎn)的View。

現(xiàn)在先來(lái)講一下KeyEvent到達(dá)Activity后的傳遞流程。

1、一個(gè)完整的KeyEvent由onKeyDown和onKeyUp組成,KeyEvent首先由進(jìn)入Activity的dispatchKeyEvent進(jìn)行onKeyDown事件的分發(fā)。

2、從最外層ViewGroup進(jìn)行遍歷,直到找到真正擁有焦點(diǎn)的View并回調(diào)此事件。

如下圖是完整流程



3、如果中間某個(gè)ViewGroup滿足focus條件,則會(huì)回調(diào)當(dāng)前onkeyDown并將不會(huì)繼續(xù)往下子View傳遞。

如下圖,View3主動(dòng)獲取焦點(diǎn),并且button設(shè)為不可獲取焦點(diǎn)


4、如果中間某ViewGroup的dispatchKeyEvent方法返回true,則表明此事件被攔截。

如下圖,view2攔截了keyEvent事件

5、如果獲取焦點(diǎn)的view的回調(diào)事件返回true,則表明已經(jīng)處理,Avtivity的此回調(diào)事件將不會(huì)回調(diào)

如下圖,button的onKeyDown執(zhí)行,而activity的onKeyDown不會(huì)執(zhí)行


看完之后是不是對(duì)這方面有了一定的加深呢,雖然寫的很片面,但是基本已經(jīng)滿足大家對(duì)這個(gè)的理解。如果有什么疑問(wèn)可以跟帖說(shuō)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 Android事件分發(fā)機(jī)制是Android開(kāi)發(fā)者必須了解的基礎(chǔ) 網(wǎng)上有大量關(guān)于Android事件分發(fā)機(jī)制的文...
    Carson帶你學(xué)安卓閱讀 262,468評(píng)論 204 2,042
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程,因...
    小菜c閱讀 7,295評(píng)論 0 17
  • 事件分為按鍵事件分發(fā),觸摸事件分發(fā),還有軌跡球事件,軌跡球已經(jīng)被淘汰,按鍵事件分發(fā)主要是在TV上,使用遙控器做按鍵...
    博為峰51Code教研組閱讀 1,144評(píng)論 0 0
  • 文/書(shū)小棠 夜雨 是過(guò)路人心靈的盤纏 野花微醺 沿著路邊開(kāi)了大地滿懷 滿意的做牧羊人的情人 如若此時(shí)來(lái)一陣風(fēng) 而只...
    書(shū)小棠閱讀 251評(píng)論 0 2

友情鏈接更多精彩內(nèi)容