gpt4 book ai didi

android - 在 TYPE_SYSTEM_ALERT AND TYPE_SYSTEM_OVERLAY 之间切换,并捕获无法正常工作的触摸事件

转载 作者:太空宇宙 更新时间:2023-11-03 13:00:07 26 4
gpt4 key购买 nike

我在服务中创建了一个 View ,它始终在 android 中的每个应用程序之上运行。

最初,服务的行为是 TYPE_SYSTEM_ALERT。

WindowManager.LayoutParams layparams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
layparams .gravity = Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL;
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(serviceView, layparams );

我在运行时更改服务的行为意味着在触摸时在 TYPE_SYSTEM_ALERT 和 TYPE_SYSTEM_OVERLAY 之间切换。当我触摸 View 参数外部和触摸 View 参数内部时,会发生切换。

layparams .type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
Using updateViewLayout(serviceView, layparams )

问题: 当我触摸 View 外部时,第一次触摸只会激活 TYPE_SYSTEM_OVERLAY,然后外部应用程序工作正常。当 TYPE_SYSTEM_OVERLAY 工作时,之后当您在 View 内触摸时,它将触发 View 后面的对象的 Action ,而不是 View 的 Action 。但是当你一旦触摸 View 时,TYPE_SYSTEM_ALERT 将被应用,现在 View 将正常运行。

当前实现:当在布局参数之间进行切换时,我必须触摸两次才能完成该特定操作。

最佳答案

使用这个...在 ICS 及更高版本上完美运行

params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;//This one is necessary.
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
params.gravity = Gravity.TOP | Gravity.RIGHT;
params.x = 0;
params.y = -params.height;
windowManager.addView(tile, params);

关于android - 在 TYPE_SYSTEM_ALERT AND TYPE_SYSTEM_OVERLAY 之间切换,并捕获无法正常工作的触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12854508/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com