Android 在对话框/警报外发送触摸

Android 在对话框/警报外发送触摸,android,android-activity,android-dialog,Android,Android Activity,Android Dialog,我试图在用户接到电话时显示一个弹出窗口,很像truecaller应用程序。弹出窗口将显示关于另一方的各种信息 我已经实现了其中的所有功能,除了弹出式UI。 我首先尝试调用一个简单的活动,它只显示在屏幕的上半部分,而下半部分则保持透明。 然后我尝试了一个对话框活动,它在屏幕中央显示弹出窗口,而我希望它位于顶部。 最后,我尝试了系统警报 在这三个场景中,我的弹出窗口都位于屏幕的某个部分,而屏幕的其余部分是透明的。 然而,触摸甚至不会从透明区域传递到它后面的活动/UI。我想弹出窗口出现,直到用户正在通

我试图在用户接到电话时显示一个弹出窗口,很像truecaller应用程序。弹出窗口将显示关于另一方的各种信息

我已经实现了其中的所有功能,除了弹出式UI。 我首先尝试调用一个简单的活动,它只显示在屏幕的上半部分,而下半部分则保持透明。 然后我尝试了一个对话框活动,它在屏幕中央显示弹出窗口,而我希望它位于顶部。 最后,我尝试了系统警报

在这三个场景中,我的弹出窗口都位于屏幕的某个部分,而屏幕的其余部分是透明的。 然而,触摸甚至不会从透明区域传递到它后面的活动/UI。我想弹出窗口出现,直到用户正在通话,这是我在接到呼叫两秒钟后使用计时器调用弹出窗口活动所做的。 问题是,即使弹出窗口显示,我也希望用户与屏幕的其余部分交互,但我无法在所有三种解决方案中都做到这一点。在弹出窗口显示之前,用户无法挂断电话,甚至无法执行任何其他操作

所以我的问题是,是否有任何方法可以在屏幕上半部分显示弹出窗口,而其余半部分仍然将触摸事件传递给系统UI的其余部分,就像truecaller popup如何(或toast消息如何)一样

这是我试过的两个系统警报代码-

LayoutParams params = new LayoutParams(
                LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ALERT,
                LayoutParams.FLAG_SHOW_WHEN_LOCKED,
                PixelFormat.OPAQUE);
params.gravity = Gravity.TOP;
windowManager.addView(preRootView, params);


我还没有找到答案,但似乎有一些库可以让你创建浮动窗口,而不必截获透明区域上的所有触摸事件

我正在努力,而且效果很好。我也期待着尝试图书馆了

我还没有读过《脱颖而出》的源代码,所以说不出他们是如何做到的

LayoutParams params = new LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT, LayoutParams.TYPE_SYSTEM_ALERT |
                LayoutParams.TYPE_SYSTEM_OVERLAY,
                LayoutParams.FLAG_NOT_TOUCH_MODAL |
                        LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSPARENT);
params.gravity = Gravity.TOP;
windowManager.addView(preRootView, params);