Android 打开对话框活动时,启动程序活动始终显示在堆栈中的下方

Android 打开对话框活动时,启动程序活动始终显示在堆栈中的下方,android,dialog,Android,Dialog,我编写了一个对话框活动,单击通知时可以触发该活动,如图1。但如果启动程序活动在堆栈中,它将显示在对话框下方,如图2所示。如果没有,对话框活动将单独显示,这是我想要的,如图3。 有人能告诉我为什么吗 对话框活动使用自定义样式,如下所示: <style name="DialogTransparent" parent="Theme.AppCompat.Light.Dialog"> <item name="windowNoTitle">true</item>

我编写了一个对话框活动,单击通知时可以触发该活动,如图1。但如果启动程序活动在堆栈中,它将显示在对话框下方,如图2所示。如果没有,对话框活动将单独显示,这是我想要的,如图3。 有人能告诉我为什么吗

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

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

我认为活动的代码是不相关的,对吗?

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

所以,为了实现您的目标,您应该将活动B作为一个普通活动,而不是DialogActivity的子类,并将此活动的布局背景设置为透明,并将contentView设置在屏幕中央

答案就在这里:


真的应该在提问前搜索更多…

@Yvette发布。很抱歉我的粗心大意…但是如何确定是否需要启动程序活动?通知是在服务中创建的@谢谢。我会想办法的。我想你可以试着用flag\u ACTIVITY\u NEW\u TASK或flag\u ACTIVITY\u CLEAR\u TASK来启动B。如果我把B设为正常活动,它仍然会把a带到前面。
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());