首页 文章

Android AlertDialog始终位于顶部

提问于
浏览
1

我正在从我的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上打开另一个活动并再次触发AlertBox时出现问题:它落后于该活动 . 当我关闭活动时,它是:AlertDialog正在显示 .

如何在顶部显示此AlertDialog?

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

1 回答

  • 1

    这是上下文问题,因为对话框使用相同的活动上下文,如果此对话框必须始终位于Top,则可以使用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”权限 . 希望这可以解决您的问题 .

相关问题