ViewGroup攔截子View點擊事件失敗

流程圖整理自Android 觸摸事件機制(四) ViewGroup中觸摸事件詳解 | skywang

事情起因:

要用RelativeLayout去攔截里面的子View的點擊事件,因此直接為

relativeLayout.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return true;
    }
});

打算通過返回true來將后續(xù)的點擊事件消費掉,但是失敗了。

在看了源碼分析之后,找到原因:

  1. 當ViewGroup有子View的時候,一定能攔截點擊事件的入口是onInterceptTouchEvent()。
  2. 當ViewGroup有子View能接收點擊事件的時候,不會調(diào)用ViewGroup任何自己的點擊事件監(jiān)聽方法(無論內(nèi)部還是外部設置的監(jiān)聽器)。
  3. 當ViewGroup沒有子View能接收點擊事件時,則會調(diào)用super.dispatchTouchEvent(),此時將ViewGroup當做View來看,按照View的那一套來。

結(jié)論:

我的RelativeLayout里面的子View可以接收點擊事件,因此點擊事件會直接傳給他們,無法通過外部設置監(jiān)聽器去攔截。

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

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

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