首页 > 解决方案 > Oreo 版本,WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY 不崩溃,但没有效果

问题描述

看:

if (Build.VERSION.SDK_INT >= 27) {
    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
} else {
    dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
}

上面的代码不会使我的应用程序崩溃,但对我的 Oreo 27 8.0.1 版本没有影响。

请参阅我的非活动类中的方法:

private void showAlertDialog(final Context context) {
    DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(context, "test", Toast.LENGTH_SHORT).show();
        }
    };

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    AlertDialog.Builder builder = new AlertDialog.Builder(context)
        .setCancelable(false)
        .setPositiveButton("OK", listener);

    View view = inflater
        .inflate(R.layout.row_passcode_dialog, null);
    builder.setView(view);

    Dialog dialog = builder.create();

    if (Build.VERSION.SDK_INT >= 27) {
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
    } else {
        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
    }

    dialog.show();

}

还要检查:即使在清单中添加了权限,仍然显示权限错误

标签: androidandroid-alertdialog

解决方案


推荐阅读