在BasePopup中,您可以很轻松的控制事件分发及事件响应,不用担心出现系统PopupWindow各种“返回按键无法屏蔽”,“点击外部不能dismiss”等bug。
【释义】:PopupWindow外部,在BasePopup中,PopupWindow外部指的是PopupContentView外部,可以简单理解为蒙层部分。
通常来说,我们日常使用的事件控制api有如下几个:
方法 | 描述 |
---|---|
setOutSideDismiss | 是否允许点击PopupWindow外部时触发dismiss,默为True - 如果设置为False,则点击蒙层不会触发dismiss |
setOutSideTouchable | 是否允许PopupWindow外部响应事件,默为False - 如果设置为True,则蒙层的事件会透传到其下方 |
setBackPressEnable | 是否允许PopupWindow响应返回键并dismiss,默为True - 如果设置为False,则按下返回键不触发dismiss |
setTouchable | 设置是否允PopupWindow是否响应事件,默认为True - 如果设置为False,PopupWindow将不响应任何事件,仅作展示用 |
有的时候我们需要跟自定义View一样,对按键事件有更多的要求,此时我们可以覆写BasePopup内提供的一些事件方法,去自定义您的逻辑:
方法 | 描述 |
---|---|
onTouchEvent | BasePopup最终的代理DecorView的onTouchEvent 事件,默认处理了返回键响应- 如果您在BasePopup中override了该方法并返回了Ture,则意味着您消耗了该事件,BasePopup框架将不再按照默认方法处理,全权交由您处理 |
onInterceptTouchEvent | BasePopup最终的代理DecorView的onInterceptTouchEvent 事件- 如果您在BasePopup中override了该方法并返回了Ture,则意味着您消耗了该事件,BasePopup框架将不再按照默认方法处理,全权交由您处理 |
onOutSideTouch | PopupWindow外部的事件回调,默认处理了点击外部dismiss - 如果您在BasePopup中override了该方法并返回了Ture,则意味着您消耗了该事件,BasePopup框架将不再按照默认方法处理,全权交由您处理 - 3.1.0版本开始,该方法增加两个参数: - touchInBackground:是否在背景中中触摸 - isPressed:是否点击事件 |
onBackPressed | PopupWindow中返回键触发回调,默认返回true - 如果您在BasePopup中override了该方法并返回了Ture,则意味着您消耗了该事件,BasePopup框架将不再按照默认方法处理,全权交由您处理 |
setOutSideDismiss
是否允许点击PopupWindow外部时触发dismiss,默认为True
setOutSideTouchable
是否允许PopupWindow外部响应事件,默认为False
通常搭配setOutSideDismiss使用
setBackPressEnable
是否允许PopupWindow响应返回键并dismiss,默为True
setTouchable
是否允许PopupWindow是否响应事件,如果不响应,则所有事件穿透Popup(包括ContentView区域及Mask区域),该Popup相当于纯展示使用。
onOutSideTouch
当BasePopup触摸到外部(如:蒙层)时,回调到该方法
参数列表:
参数 | 描述 |
---|---|
MotionEvent event | 回调的事件 |
boolean touchInBackground (2.2.3版本添加) | 是否在背景中中触摸(一般指您设置的Drawable或者您的BackgroundView) |
boolean isPressed (3.1.0版本添加) | 是否点击事件 |