本课介绍如何隐藏 Android 4.0(API 级别 14)中引入的导航栏。
尽管本课重点介绍如何隐藏导航栏,但您应将应用设计为同时隐藏状态栏,如隐藏状态栏中所述。隐藏导航栏和状态栏(同时仍保持它们易于访问)可让内容使用整个显示空间,从而提供更加身临其境的用户体验。
![系统栏](https://developer.android.google.cn/static/images/training/navigation-bar.png?authuser=8&hl=nl)
图 1. 导航栏。
隐藏导航栏
您可以使用 SYSTEM_UI_FLAG_HIDE_NAVIGATION
标志隐藏导航栏。此代码段会隐藏导航栏和状态栏:
Kotlin
window.decorView.apply { // Hide both the navigation bar and the status bar. // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as // a general rule, you should design your app to hide the status bar whenever you // hide the navigation bar. systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN }
Java
View decorView = getWindow().getDecorView(); // Hide both the navigation bar and the status bar. // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as // a general rule, you should design your app to hide the status bar whenever you // hide the navigation bar. int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions);
请注意以下几点:
- 使用此方法时,轻触屏幕上的任意位置都会使导航栏(和状态栏)重新出现并保持可见状态。用户互动会导致这些标记被清除。
- 标记被清除后,如果您想再次隐藏这些栏,应用需要重置这些标记。请参阅响应界面可见性更改,探讨如何监听界面可见性更改,以便应用相应地做出响应。
- 在不同的位置设置界面标记会产生不同的效果。如果您在 Activity 的
onCreate()
方法中隐藏系统栏,并且用户按主屏幕按钮,则系统栏会重新出现。当用户重新打开 activity 时,系统不会调用onCreate()
,因此系统栏仍保持可见。如果您希望在用户进入和退出 activity 时保留系统界面更改,请在onResume()
或onWindowFocusChanged()
中设置界面标志。 setSystemUiVisibility()
方法仅在您调用它所在的视图可见时有效。- 离开该视图会导致系统清除使用
setSystemUiVisibility()
设置的标志。
让内容显示在导航栏后面
在 Android 4.1 及更高版本中,您可以将应用内容设置为显示在导航栏后面,这样内容不会随着导航栏的隐藏和显示而调整大小。为此,请使用 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
。您可能还需要使用 SYSTEM_UI_FLAG_LAYOUT_STABLE
来帮助您的应用保持稳定的布局。
使用此方法时,您有责任确保应用界面的关键部分不会被系统栏覆盖。如需详细了解此主题,请参阅 隐藏状态栏一课。