如何在android中隐藏系统导航栏
我遵循了Android开发者指南:如何隐藏系统导航栏如何在android中隐藏系统导航栏,android,uinavigationbar,navigationbar,Android,Uinavigationbar,Navigationbar,我遵循了Android开发者指南:如何隐藏系统导航栏 int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); 它工作正常,直到我显示AlertDialog。 当对话框显示时,导航栏(三个图标:正方形、三角形和圆形)将显示在应用程序控件的顶部。尝试查看官方文档。使用这些方法显
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
它工作正常,直到我显示AlertDialog。
当对话框显示时,导航栏(三个图标:正方形、三角形和圆形)将显示在应用程序控件的顶部。尝试查看官方文档。使用这些方法显示/隐藏
systemUI
public void hideUI() {
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}
public void showUI() {
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
注意:当您显示任何AlertDialog时,系统导航仍将显示,但当您关闭它时,它将再次隐藏。如果仍然不希望出现此行为,请使用“中心视图”创建类似警报的视图 你可以试试我用过的方法
/**
* Hide system NavigationBar and StatusBar
*/
@TargetApi(Build.VERSION_CODES.KITKAT)
public void hideNavigationBar()
{
final View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
Log.i("LOG","Menu Shown is this"+ visibility);
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE);
}
});
}
从Activity
的onResume
调用上述方法,并确保覆盖活动中的以下方法
@Override
@TargetApi(Build.VERSION_CODES.KITKAT)
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus)
{
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE
);
}
}
创建警报时,应使用以下方法隐藏导航
public static void showAlert(Context context,String title,String message) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder.setTitle(title);
alertDialogBuilder.setMessage(message);
alertDialogBuilder.setCancelable(false);
alertDialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
final AlertDialog alertDialog = alertDialogBuilder.create();
//Here's the magic..
//Set the dialog to not focusable (makes navigation ignore us adding the window)
alertDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
alertDialog.show();
//Set the dialog to immersive
alertDialog.getWindow().getDecorView().setSystemUiVisibility(
((Activity)context).getWindow().getDecorView().getSystemUiVisibility());
//Clear the not focusable flag from the window
alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
}
我从这个中找到了上面的工作代码,如下所示:-我从中获取了参考,对不起,我不知道上面的链接。非常感谢。这是我已经挣扎了很多小时的事情。你是唯一了解这个问题的人。在处理了一段时间后,我发现了一个主要的错误。问题是,当我显示一个“隐藏”的编辑框时,它没有向上推对话框,所以我不能点击按钮。最后,我删除了“clearFlags”行,并仅在显示编辑控件时才添加它。此外,当应用程序显示编辑控件并执行“clearFlags”时,它会显示键盘,但也会显示导航栏。因此,最后我需要使用命令pmdisable com.android.systemui从“adb”更改平板电脑配置