Android 将事件从我的活动委派到屏幕

Android 将事件从我的活动委派到屏幕,android,android-notifications,android-dialog,Android,Android Notifications,Android Dialog,我有一个以对话框为主题的活动,并对其进行了设置,以便在用户单击外部时完成。 this.setFinishOnTouchOutside(true) 正如预期的那样,当用户单击外部时,它将完成。该活动标记为浮动活动,仅显示在手机顶部 现在,如果用户单击屏幕的任何其他部分,如主屏幕上的电话按钮/联系人按钮,则活动将完成,但用户必须再次单击电话/联系人应用程序图标以打开电话/联系人应用程序 我想要的是,如果用户在我的活动之外单击,则必须执行该操作,就像该活动根本不在屏幕上一样。类似于通知,它不会阻止用户

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

正如预期的那样,当用户单击外部时,它将完成。该活动标记为浮动活动,仅显示在手机顶部

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

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

执行此操作的唯一方法是使用隐藏的WindowManager.LayoutParams标志

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

Android阻止您“通过”可触摸窗口进行触摸,因为它假定窗口应该接收到触摸事件。Android还阻止您以编程方式“触摸”屏幕(无需根用户或系统访问),很可能是出于安全原因


我在AOSP中搜索了一会儿,找到了


阅读评论,可以推断,虽然您看到的内容不会占据整个屏幕,但活动的窗口会占据整个屏幕。因此,虽然没有单击活动中的任何内容,但窗口仍然覆盖了所有内容,只是有一个透明的背景,并处理未传递到活动UI的触摸。这让我们回到了“通过触摸”的问题。

但我的活动只占据了屏幕的一部分。所以它不是真正的触摸。我希望这种行为适用于显示我的活动的屏幕部分以外的触摸。不过,Android仍在处理触摸,而且当你的活动仍在显示时,它不会让任何东西触摸,即使它不是它当前覆盖的地方。有什么方法可以让我创建一个不在堆栈顶部的活动吗?或者当你不能使用你的活动时,活动一创建就可能落后。只要我的活动在堆栈中就可以了。我只是不想让用户被我的活动打扰。活动可以停留在堆栈的后面,用户可以在需要时访问它。