美文网首页Android
Activity禁用全局点击事件

Activity禁用全局点击事件

作者: 儿歌八万首 | 来源:发表于2019-09-18 17:52 被阅读0次

    android 事件分发机制是从Activity-ViewGroup-View,层层分发的,通过activtiy的dispatchTouchEvent方法分发到ViewGroup的dispatchTouchEvent,ViewGroup通过调用onInterceptTouchEvent方法来判断是否拦截事件,如果不拦截就继续分发到View中,然后遍历ViewGrop中所有子View找到我们点击的View控件,将事件传递到该View的dispatchTouchEvent中。然后View会调用自身的onTouch方法,我们可以重写onTouch方法,进行拦截,点击事件。

    具体分发机制可以看这边博客:
    Android事件分发机制详解:史上最全面、最易懂

    当我们了解了事件分发机制后,如果现在又这样的一个需求,比如网络请求的时候,要禁止所有按钮的点击事件,比较笨的方法是,单独关闭按钮的点击事件。当我们了解了分发机制后,可以直接重写Activity 的dispatchTouchEvent方法,返回一个true,即可拦截所有的触摸时间,这样整个页面的按钮都不能被点击,(触摸优先级高于点击的优先级,点击事件只是触摸的一种特殊方式。),可以在activity基类重写
    dispatchTouchEvent方法,然后设置一个变量来控制是否禁用全局点击事件,具体代码:

     private var disableAllClick: Boolean = false
    
        //禁用所有触摸事件
        fun setDisableAllClick(disableAllClick: Boolean): BaseActivity {
            this.disableAllClick = disableAllClick
            return this
        }
    
    
        override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
            return if (!disableAllClick) {
                super.dispatchTouchEvent(ev)
            } else {
                disableAllClick
            }
    
        }
    

    这样就可以直接在子类activity中调用setDisableAllClick(true)来禁用点击全局点击事件了。

    相关文章

      网友评论

        本文标题:Activity禁用全局点击事件

        本文链接:https://www.haomeiwen.com/subject/bwgeyctx.html