我的应用程序的主要活动是首选项页面。这是用户单击应用程序图标时显示的内容。我还有一个服务,它发送用户状态栏通知,并可以在屏幕上显示半透明的覆盖。我按照this帖子创建了透明活动,所有这些都有效。
问题在于,无论何时我显示半透明活动,应用程序的主窗口(首选项页面)都会在其后面显示。这意味着,半透明叠加层显示在当前正在运行的任何其他应用程序之上。
如何在半透明活动出现时,我的应用程序中没有其他活动可见?
这是我在AndroidManifest.xml中的主要活动定义:
<activity android:name=".AppPreferences" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
我还有半透明叠加层,它使用源自Theme.Translucent的自定义主题:
<activity android:name=".AppPopupActivity" android:theme="@style/Theme.SemiTransparent">
<intent-filter>
<action android:name="com.app.HIDE_POPUP"></action>
</intent-filter>
</activity>
以下是半透明叠加层的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button android:text="@string/button_done"
android:id="@+id/doneButton"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</RelativeLayout>
</RelativeLayout>
服务:
<service android:name="AppService">
<intent-filter>
<action android:name="com.app.AppService" />
</intent-filter>
</service>
要显示透明活动,请在服务中运行以下命令:
Intent intent = new Intent(this, AppPopupActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
感谢您的帮助
答案 0 :(得分:5)
虽然Profete162的答案不起作用,但它使我朝着正确的方向发展。经过更多的阅读和实验,我认为正确的答案是将主要活动的launchMode更改为“singleInstance”,如下所示:
<activity android:name=".AppPreferences" android:label="@string/app_name"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
答案 1 :(得分:0)
“问题是,无论何时我显示我的半透明活动,应用程序的主窗口(首选项页面)都会在其后面显示。”
您的问题是您拥有自己的设置活动,而且还有透明活动。他们处于“堆叠”状态
当您致电通知时,transparentActivity会出现在活动堆栈(=设置)
之前如果你想看看透明活动后面发生了什么,你必须像这样摆脱你的堆栈:
尝试添加FLAG_ACTIVITY_CLEAR_TOP:
此启动模式也可用于与之配合使用 FLAG_ACTIVITY_NEW_TASK:如果用于启动任务的根活动, 它会将任何当前正在运行的任务实例带到 前景,然后将其清除到其根状态。这是特别的 例如,从通知启动活动时很有用 管理器。
所以启动A的代码是:
Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);