本课程介绍如何隐藏导航栏,导航栏是在 Android 4.0(API 级别 14)中引入的。
虽然本课程重点介绍如何隐藏导航栏,但您应同时设计您的应用以隐藏状态栏,如隐藏状态栏中所述。隐藏导航栏和状态栏(同时仍使其易于访问)可让内容使用整个显示空间,从而提供更具沉浸感的用户体验。

图 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()
方法中隐藏系统栏,用户按下 Home 键时,系统栏将重新出现。当用户重新打开 Activity 时,onCreate()
不会被调用,因此系统栏将保持可见。如果您希望系统界面更改在用户进出 Activity 时持续存在,请在onResume()
或onWindowFocusChanged()
中设置界面标记。 - 方法
setSystemUiVisibility()
只有在您调用它的视图可见时才有效。 - 离开视图会导致使用
setSystemUiVisibility()
设置的标记被清除。
让内容显示在导航栏后面
在 Android 4.1 及更高版本中,您可以将应用内容设置为显示在导航栏后面,这样当导航栏隐藏和显示时,内容就不会重新调整大小。为此,请使用 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
。您可能还需要使用 SYSTEM_UI_FLAG_LAYOUT_STABLE
来帮助应用保持稳定的布局。
当您使用此方法时,您有责任确保应用的界面关键部分不会被系统栏覆盖。有关此主题的更多讨论,请参阅 隐藏状态栏 课程。