Android AlertDialog 总是在最前面

标签 android android-alertdialog

我正在从我的 MainActivity 触发一个 AlertDialog,它工作正常,如下所示:

public void showCustomAlert(String text){

    final String alertText = text;

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            AlertDialog.Builder myDialogBox = new AlertDialog.Builder(mContext);
            myDialogBox.setTitle("Alert");
            myDialogBox.setMessage(alertText);
            myDialogBox.setCancelable(false);
            myDialogBox.setPositiveButton("OK", new DialogInterface.OnClickListener(){

                  public void onClick(DialogInterface dialog, int whichButton) {
                         dialog.dismiss();
                  }

            });
            myDialogBox.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
            {
                  public void onClick(DialogInterface dialog, int which) {
                         dialog.dismiss();
                  }
            });
            AlertDialog alertDialog = myDialogBox.create();
            alertDialog.show();
       }
    });
}

当我在 MainActivity 之上打开另一个 Activity 并再次触发 AlertBox 时,问题就出现了:它落后于那个 Activity 。当我关闭该 Activity 时,它就在那里:正在显示 AlertDialog。

如何让 AlertDialog 始终显示在顶部?

注意:此 AlertDialog 是由我的 MainActivity 上的推送通知监听器触发的,而不是由点击监听器触发的。

最佳答案

这是上下文问题,因为对话框使用相同的 Activity 上下文, 如果此对话框必须始终位于顶部,可以使用 SYSTEM_ALERT_SERVICE 来完成,例如

public void showCustomAlert(String text){

    final String alertText = text;

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            AlertDialog.Builder myDialogBox = new AlertDialog.Builder(mContext);
            myDialogBox.setTitle("Alert");
            myDialogBox.setMessage(alertText);
            myDialogBox.setCancelable(false);
            myDialogBox.setPositiveButton("OK", new DialogInterface.OnClickListener(){

                  public void onClick(DialogInterface dialog, int whichButton) {
                         dialog.dismiss();
                  }

            });
            myDialogBox.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
            {
                  public void onClick(DialogInterface dialog, int which) {
                         dialog.dismiss();
                  }
            });
            AlertDialog alertDialog = myDialogBox.create();
                  alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
            alertDialog.show();
       }
    });
}

注意“android.permission.SYSTEM_ALERT_WINDOW”权限。 希望这能解决您的问题。

关于Android AlertDialog 总是在最前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42058900/

相关文章:

android - 在水平和垂直方向的 recyclerview 中膨胀布局,FlexboxLayout 与回收 View 添加 View 水平自动垂直

Android 中的 Javascript 和 HTML

Android 上的 JavaScript 随机停止工作

Android - 如何更改底部导航栏文本的字体系列

java - 如何删除 AlertDialog.Multiple Choice 中的第一个复选标记

java - AlertDialog MultiChoice 没有给我正确的选择

java - 如何在alertDialog中单击按钮时启动 Activity

Android 模拟器在 Windows 7 上启动时卡住

android - 为 AlertDialog 的进入和退出设置动画

android - 无法关闭 android 中的警报对话框