此窗口永远不会获得按键输入焦点,因此用户无法向其发送按键或其他按钮事件。那些按钮事件会转到它后面的任何可聚焦窗口。 这个标志还将启用FLAG_NOT_TOUCH_MODAL
,无论FLAG_NOT_TOUCH_MODAL
是否被明确设置。
设置此标志还意味着该窗口将不需要与输入法进行交互,因此它将被Z轴排序并且独立于任何活动的输入法进行定位。(通常意味着位于输入法的上层,因此它可以使用完整的屏幕上显示其内容,并在需要时覆盖输入法。 您可以使用FLAG_ALT_FOCUSABLE_IM
修改此行为。
这个窗口永远无法获取touch事件。
即使当前的窗口可聚焦(未设置FLAG_NOT_FOCUSABLE
时),也允许将窗口外部的任何指针事件发送到其后面的窗口。 否则,无论指针事件是否在窗口内,窗口它自己都将消耗所有指针事件。
如果你已经设置了FLAG_NOT_TOUCH_MODAL
,那么你可以设置FLAG_WATCH_OUTSIDE_TOUCH
这个flag。这样一个点击事件如果发生在你的窗口之外的范围,你就会接收到一个特殊的MotionEvent:MotionEvent.ACTION_OUTSIDE
。注意,你只会接收到点击事件的第一下,而之后的DOWN/MOVE/UP等手势全都不会接收到。
设置后,窗口将接受超出其范围的、被发送到其他也支持分离触摸的窗口触摸事件。当这个flag没有设置的时候,第一下点击则决定了哪个窗口会接收整个点击事件,直到手指拿开为止。
当设置了这个flag时,每一个点击事件(不一定是第一个)都决定了那个窗口来接收剩下的点击事件,直到手指拿开为止,从而使多指触摸事件会被分开传递给多个窗口。
此Flag用于本地聚焦模式的窗口。处于本地聚焦模式的窗口可以通过Window#setLocalFocus(boolean, boolean)
,独立于window manager去控制焦点。
通常这个模式下的窗口都不会从window manager接收触摸/按键事件,但仍可以通过使用Window#injectInputEvent(InputEvent)
去进行变量本地注入去获取事件。