我正在创建一个应用程序,当您按下某个按钮时会弹出警告对话框。状态栏需要隐藏,所以我的活动中有一个方法:
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);
}
}
我在activity的onCreate方法中调用此方法,并且它会正常工作,直到弹出警告对话框。显示警告对话框后,状态栏将立即返回。我尝试了以下方法:
alertDialog.show();
hideStatusBar();
哪个不起作用。然后我为我的活动覆盖了onWindowFocusChanged方法:
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
hideStatusBar();
}
使状态栏的背景透明,但仍然不会隐藏它。有没有办法在显示警告对话框时隐藏状态栏?
答案 0 :(得分:5)
每个对话框都有自己的Window,它有自己的风格。
在你的情况下,hideStatusBar()
无法正常工作,因为它来自活动的onCreate()
,这意味着它会尝试更改活动窗口的外观,但不会更改对话框和&#39} #39;窗口。
解决方案是:
Subclass 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);
}
}
答案 1 :(得分:3)
使用AlertDialog.Builder构建AlertDialog并创建AlertDialog。
在调用show()之前,请将对话框的窗口标志设置为不可聚焦。
显示对话框后,在代表AlertDialog的窗口的decorView上设置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);
现在,当显示AlertDialog时,不会出现SystemUI元素。希望这会有所帮助。
答案 2 :(得分:0)
尽管这里有答案,但我对此有很多麻烦。这是我发现在Kotlin中隐藏状态栏的解决方案。
dialog.window?.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
dialog.show()
请注意,如果保留该对话框,并希望在关闭该对话框后再次显示该对话框,则必须再次设置标志。
答案 3 :(得分:-1)
试试这个,
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.activity_no_title_dialog);
dialog.show();