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)来禁用点击全局点击事件了。

更多相关文章

  1. android notification 使用
  2. Windows搭建Eclipse+JDK+SDK的Android(安卓)--安卓开发入门级
  3. android 学习之触摸事件 -- 认识MotionEvent
  4. Android(安卓)滑动效果入门篇(一)—— ViewFlipper
  5. Android中事件分发机制详解
  6. Android(安卓)studio打开github上clone下来的项目出现“Failed t
  7. Android(安卓)纯代码加入点击效果
  8. Android(安卓)ViewPager事件滑动监听修改
  9. Android(安卓)StaggeredGrid 加下拉刷新功能 PullToRefresh

随机推荐

  1. android api (82) —— InputConnection
  2. Android关于布局的经典面试题及解答(一)
  3. Android: 启动另外的APP及传递参数
  4. Android之Content ProviderII
  5. 复制assets下的数据库到SD卡
  6. 【转】Android的计量单位px,in,mm,pt,dp,
  7. 【Android Audio】Android Audio System
  8. android 调用腾讯微博接口
  9. Ubuntu10.04 Android 开发环境配置 SDk下
  10. Android 学习教程一 安装eclipse android