在对话/警报外发送触摸

时间:2015-01-24 15:13:25

标签: android android-activity android-dialog

我试图在用户拨打电话时显示弹出窗口,就像真正的呼叫者应用程序一样。弹出窗口将显示有关另一方的各种信息。

我已经在其中实现了所有内容,弹出式UI除外。 我首先尝试调用一个简单的活动,它显示在屏幕的上半部分,使下半部分显示为透明。 然后我尝试了一个对话框活动,它显示屏幕中心的弹出窗口,而我希望它在顶部。 最后,我尝试过系统警报。

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

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

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

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);

1 个答案:

答案 0 :(得分:0)

我还没有找到答案,但看起来像那里的图书馆允许你创建浮动窗口,而不会拦截透明区域上的所有触摸事件。

我正在尝试Standout library并且它工作得很好。我也希望尝试Tooleap库。

我还没有读过Standout的源代码,所以不能说出他们是如何做到的。