打开对话框活动时,如果在堆栈中,启动器活动始终显示在下方

Posted

技术标签:

【中文标题】打开对话框活动时,如果在堆栈中,启动器活动始终显示在下方【英文标题】:When opening dialog activity, the launcher activity always shows below if in the stack 【发布时间】:2015-11-07 13:53:32 【问题描述】:

我编写了一个对话框活动,可以在单击通知时触发,例如图片1。但是如果启动器活动在堆栈中,它将出现在对话框下方,就像图片2。如果没有,对话活动将单独显示,这就是我想要的,就像图片3。 谁能告诉我为什么?

对话框活动使用如下自定义样式:

<style name="DialogTransparent" parent="Theme.AppCompat.Light.Dialog">
    <item name="windowNoTitle">true</item>
</style>

以下是通知生成器代码:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this).setAutoCancel(false).setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.todo_logo)).setSmallIcon(getNotificationIcon()).setContentText(getString(R.string.notificatioin_new_task)).setOngoing(true);
Intent alarmIntent = new Intent(this, DialogEventActivity.class);
PendingIntent alarmPendingIntent = PendingIntent.getActivity(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(alarmPendingIntent);
manager.notify(NEW_NOTIFICATION_ID, mBuilder.build());

我认为 Activity 的代码无关紧要,对吗?

【问题讨论】:

@Yvette 已发布。对不起我的粗心... 但是如何确定是否需要启动器活动?通知是在服务中创建的。 @Yvette 谢谢。我会努力解决的。 【参考方案1】:

如果从Activity A到Activity B,并且B是DialogActivity的子类或者它的主题设置为dialog,B会在A之前显示为一个对话框,A也是可见的,如果你的应用程序不在前台并且你启动Activity B,它将您的整个应用程序带到前台,携带您应用程序中的所有活动。因此,您的 Activity B 和您离开应用程序时的最后一个可见活动将同时可见。

所以为了实现你的目标,你应该让你的 Activity B 作为一个普通的 Activity,而不是 DialogActivity 的子类,并将你的布局背景设置为透明,并将你的 contentView 设置在屏幕的中心。

【讨论】:

我认为你可以尝试以标志 FLAG_ACTIVITY_NEW_TASK 或 FLAG_ACTIVITY_CLEAR_TASK 开头 B。 如果我将 B 设置为正常活动,它仍然会将 A 放在前面。【参考方案2】:

答案就在这里: https://***.com/a/8924417/5058310

真的应该在提问之前多谷歌...

【讨论】:

以上是关于打开对话框活动时,如果在堆栈中,启动器活动始终显示在下方的主要内容,如果未能解决你的问题,请参考以下文章

Android活动堆栈和对话框

当一个活动直接从一个通知启动时,你如何构建一个 Android 后台堆栈?

按下设备的主页键后,如何始终在图标按下时打开当前活动

如何停止在对话框中打开的键盘上调整大小/向上推的活动?

Android:从历史堆栈中清除旧的活动实例

如果在对话框上按下按钮,如何启动活动