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

标签 android layout parameters

我在服务中创建了一个 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/

相关文章:

android - 测量 TextInputLayout 错误容器的高度

amazon-web-services - Cloudformation - 在 EC2 服务器中使用参数

android - ImageView 在 Camera Surface View 后面移动

android - 更改 Gridview 的图像

java - Android 应用程序的 JWT 身份验证

java - 如何让 Android TableLayout 填满屏幕?

c++ - 在 Qt 中获取父布局

swift - 如何在 swift 中创建像 Sorted() 这样将接收者作为参数的方法?

python - 面向对象编程不带参数访问类中的函数(python)

android - 如何阻止警报对话框自动消失