WindowManager Flag对View触摸事件的影响
使用场景
- FLAG_NOT_FOCUSABLE:使当前View不会获得焦点,此View会将焦点传递到下层可获取焦点的View
- FLAG_NOT_TOUCH_MODAL:允许当前View获取焦点,也允许View范围外的点击事件传递给下层的View
- FLAG_NOT_TOUCHABLE:使View无法获取焦点
- FLAG_WATCH_OUTSIDE:当View范围外的点击事件发生时,View将收到MotionEvent.ACTION_OUTSIDE
- FLAG_SPLIT_TOUCH:使View能收到View范围之外发送给其他View的点击事件,支持多点触控
①FLAG_NOT_FOCUSABLE
public static final int FLAG_NOT_FOCUSABLE = 0x00000008;
-
设置了此Flag的View不会获取焦点,也不需要接受各种输入事件,以及此Flag会同时启动FLAG_NOT_TOUCH_MODAL,最终输入事件会直接传递给下层具有焦点的View。View之外能点击。
-
如果没有设置
FLAG_NOT_FOCUSABLE
,那么屏幕上弹窗之外的地方不能点击。 -
补充1:在View中添加隐藏status bar、navigation bar的代码,View设置FLAG_NOT_FOCUSABLE,在View中会导致不能与系统bar交互(status bar及navigation bar没有被隐藏)。
-
补充2:上层View设置FLAG_NOT_FOCUSABLE,下层View没有设置,在按压TV遥控器上的上、下、左、右键会跳过View1,直接在下层可获取焦点的View2上获取焦点。
②FLAG_NOT_TOUCH_MODAL
public static final int FLAG_NOT_TOUCH_MODAL = 0x00000020;
-
设置了这个Flag,则当前View允许获取焦点,View之外的点击事件传递给下层的View。
-
不设置这个Flag,则当前View消费掉所有点击事件,不管点击事件是否在View的范围之内。
③FLAG_NOT_TOUCHABLE
public static final int FLAG_NOT_TOUCHABLE = 0x00000010;
- 设置了这个FLAG,那么这个View无法获取touch事件。
④FLAG_WATCH_OUTSIDE_TOUCH
public static final int FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000;
- 需先设置FLAG_NOT_TOUCH_MODAL。
-
若点击事件在vIew范围之外,会收到MotionEvent:MotionEvent.ACTION_OUTSIDE。
只会接收到点击事件的第一下,而后的DOWN/MOVE/UP等手势不会接收到。
文章来源:https://www.toymoban.com/news/detail-775551.html
⑤FLAG_SPLIT_TOUCH
public static final int FLAG_SPLIT_TOUCH = 0x00800000;
- 不设置,第一下点击则决定了哪个窗口会接收整个点击事件,直到手指拿开为止。
- 设置了,每一个点击事件(不一定是第一个)都决定了那个窗口来接收剩下的点击事件,直到手指拿开为止,从而使多指触摸事件会被分开传递给多个窗口。
文章来源地址https://www.toymoban.com/news/detail-775551.html
到了这里,关于WindowManager Flag对View触摸事件的影响的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!