我试图仅隐藏底部导航栏,而不是状态栏。我得到的大多数代码都同时隐藏了导航栏和状态栏。
答案 0 :(得分:0)
View v = getWindow().getDecorView();
int options = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
v.setSystemUiVisibility(options);
答案 1 :(得分:0)
尝试以下功能。由于Android R
,View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
,setSystemUiVisibility
等中的更改已被弃用。我已经完成了处理这种情况的功能。
public void hideBottomNavigationBar() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
getWindow().setDecorFitsSystemWindows(false);
WindowInsetsController controller = getWindow().getInsetsController();
if(controller != null) {
controller.hide(WindowInsets.Type.navigationBars());
controller.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
}
} else {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}
}
关于使用docs中的View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
的另一件事:
有一个局限性:由于导航控件非常重要,因此最少的用户交互将使它们立即重新出现。发生这种情况时,此标志和SYSTEM_UI_FLAG_FULLSCREEN都将被自动清除,以便两个元素同时重新出现。
要解决此限制,您可以像这样设置View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
但这仅适用于SDK 19及更高版本。