【发布时间】:2020-07-21 15:06:45
【问题描述】:
我试图只隐藏底部导航栏而不是状态栏。我得到的大部分代码都隐藏了导航栏和状态栏。
【问题讨论】:
我试图只隐藏底部导航栏而不是状态栏。我得到的大部分代码都隐藏了导航栏和状态栏。
【问题讨论】:
试试下面的功能。由于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 及更高版本。
【讨论】:
View v = getWindow().getDecorView();
int options = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
v.setSystemUiVisibility(options);
【讨论】: