android 多个 activity dialog 置顶
时间: 2023-08-25 16:04:43 浏览: 272
如果你想让多个 Activity Dialog 窗口都置顶,可以考虑使用一个辅助类来管理所有的 Dialog 窗口。以下是一种可行的实现方式:
1. 创建一个名为 `DialogManager` 的辅助类,并添加以下代码:
```java
public class DialogManager {
private static ArrayList<Dialog> sDialogs = new ArrayList<>();
public static void addDialog(Dialog dialog) {
if (!sDialogs.contains(dialog)) {
sDialogs.add(dialog);
updateDialogs();
}
}
public static void removeDialog(Dialog dialog) {
if (sDialogs.contains(dialog)) {
sDialogs.remove(dialog);
updateDialogs();
}
}
private static void updateDialogs() {
Dialog topDialog = null;
for (Dialog dialog : sDialogs) {
if (dialog.isShowing()) {
if (topDialog == null || dialog.getWindow().getAttributes().type > topDialog.getWindow().getAttributes().type) {
topDialog = dialog;
}
}
}
if (topDialog != null) {
topDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
topDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
}
}
```
这个类维护了一个 `sDialogs` 静态成员变量,用于存储所有的 Dialog 窗口。`addDialog()` 和 `removeDialog()` 方法分别用于添加和删除 Dialog 窗口。`updateDialogs()` 方法会在 Dialog 窗口被添加或删除时调用,它会找到当前最顶层的 Dialog 窗口,并将其置顶。
2. 在每个需要显示 Dialog 窗口的 Activity 中,重写 `onCreateDialog()` 方法,并在其中添加以下代码:
```java
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog = new Dialog(this);
// 设置 Dialog 窗口的属性
DialogManager.addDialog(dialog);
return dialog;
}
@Override
protected void onStop() {
super.onStop();
DialogManager.removeDialog(getDialog());
}
```
这将会在每个 Activity 中创建一个 Dialog 窗口,并将其添加到 `DialogManager` 中进行管理。当 Activity 停止时,需要将其对应的 Dialog 窗口从 `DialogManager` 中删除。
请注意,在添加 `TYPE_SYSTEM_ALERT` 类型的窗口时,需要申请 `android.permission.SYSTEM_ALERT_WINDOW` 权限。如果你的应用程序的 targetSdkVersion 是 26 或更高版本,则还需要在 AndroidManifest.xml 文件中添加该权限。
阅读全文