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)
这使状态栏的背景透明,但仍然不隐藏它.有没有办法在显示警告对话框时隐藏状态栏?
使用 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 元素。希望这可以帮助。
每个对话框都有自己的窗口,它们都有自己的样式。
在您的情况下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)
| 归档时间: |
|
| 查看次数: |
8234 次 |
| 最近记录: |