将活动从我的活动委托给屏幕

时间:2018-09-09 22:17:25

标签: android android-notifications android-dialog

我有一个主题类似于对话框的活动,并且已对其进行设置,以便在用户单击外部时完成。     this.setFinishOnTouchOutside(true);

按预期,当用户在外部单击时,它完成。该活动被标记为浮动活动,仅显示在手机顶部。

现在,如果用户单击屏幕上的任何其他部分(如主屏幕上的电话按钮/联系人按钮),则活动已完成,但用户必须再次单击电话/联系人应用程序图标才能打开电话/联系人应用程序。

我想要的是,如果用户在我的活动之外单击,则必须执行该动作,就好像该活动根本不在屏幕上一样。通知之类的东西,不会阻止用户执行其他任务。

1 个答案:

答案 0 :(得分:0)

可能能够做到这一点的唯一方法是使用隐藏的WindowManager.LayoutParams标志FLAG_SLIPPERY

当触摸离开您的视图但仍保留在屏幕上时,这允许您从视图开始的触摸继续到下面的任何视图。但是,我认为这行不通。

Android会阻止您“触摸”可触摸的窗口,因为它假定Window应该正在接收TouchEvent。 Android还可以防止您以编程方式“触摸”屏幕(没有root用户或系统访问权限),这很可能是出于安全原因。


我在AOSP中挖了一段时间,发现了this

阅读注释,可以推断出,虽然您看到的不会占据整个屏幕,但活动窗口却会占据整个屏幕。因此,虽然未单击“活动”中的任何内容,但窗口仍会覆盖所有内容,只是具有透明背景,并且正在处理未传递到活动UI的触摸。这使我们回到“触碰”问题。