Android AlertDialog 始终位于顶部

fan*_*ana 1 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();
       }
    });
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 5

这是上下文问题,因为对话框使用相同的活动上下文,如果该对话框必须始终位于顶部,则可以使用 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();
       }
    });
}
Run Code Online (Sandbox Code Playgroud)

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