显示Alert Dialog Android时隐藏状态栏

Tho*_*mas 10 android statusbar android-alertdialog

我正在创建一个应用程序,当您按下某个按钮时会弹出一个警告对话框.状态栏需要隐藏,所以我的活动中有一个方法:

private void hideStatusBar(){
    if (Build.VERSION.SDK_INT < 16){
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
    }
    else {
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);
    }
}
Run Code Online (Sandbox Code Playgroud)

我在activity的onCreate方法中调用此方法,并且它会正常工作,直到弹出警告对话框.显示警告对话框后,状态栏将立即返回.我尝试了以下方法:

alertDialog.show();
hideStatusBar();
Run Code Online (Sandbox Code Playgroud)

哪个没用.然后我为我的活动覆盖了onWindowFocusChanged方法:

public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    hideStatusBar();
}
Run Code Online (Sandbox Code Playgroud)

这使状态栏的背景透明,但仍然不隐藏它.有没有办法在显示警告对话框时隐藏状态栏?

Sho*_*ing 7

使用 AlertDialog.Builder 构建 AlertDialog 并创建 AlertDialog。
在调用 show() 之前,将对话框的窗口标志设置为不可聚焦。
显示对话框后,在代表 AlertDialog 的窗口的装饰视图上设置 SystemUiVisibility 标志,并清除不可聚焦标志。

    AlertDialog.Builder adBuilder = new AlertDialog.Builder(this);
    AlertDialog alertDialog = adBuilder.setCancelable(false).
            setMessage("Turn ended, Click OK").
            setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                }
            }).create();
    alertDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
    alertDialog.show();
    alertDialog.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
    alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
Run Code Online (Sandbox Code Playgroud)

现在,当显示 AlertDialog 时,不会出现 SystemUI 元素。希望这可以帮助。

  • 使用``alertDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); AlertDialog.show();``` 足以让我显示而无需任何系统用户界面跳转 (5认同)

Ale*_*sov 6

每个对话框都有自己的窗口,它们都有自己的样式。

在您的情况下hideStatusBar()不起作用,因为它是从活动的调用的,onCreate()这意味着它将尝试更改活动窗口的外观,而不是更改对话框窗口的外观。

解决方案是:

子类AlertDialog。移动到那里hideStatusBar(),然后从对话框的调用它onCreate()

这意味着你必须有一个协议Dialog.getWindow(),而Activity.getWindow()

这里有一些示例:

public static class TranslucentDialog extends AlertDialog {
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }
}
Run Code Online (Sandbox Code Playgroud)


Par*_*ani -2

尝试这个,

final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.activity_no_title_dialog);
dialog.show();
Run Code Online (Sandbox Code Playgroud)