隐藏导航栏

本课程介绍如何隐藏导航栏,导航栏是在 Android 4.0(API 级别 14)中引入的。

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

system bars

图 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);

请注意以下事项

  • 使用此方法,触摸屏幕上的任何位置都会导致导航栏(和状态栏)重新出现并保持可见。用户交互会导致清除标志。
  • 清除标志后,如果要再次隐藏栏,则应用需要重置它们。有关如何侦听 UI 可见性更改以使应用能够相应地做出响应的讨论,请参阅响应 UI 可见性更改
  • 设置 UI 标志的位置会产生影响。如果您在活动的onCreate()方法中隐藏系统栏,并且用户按下了“主页”,则系统栏将重新出现。当用户重新打开活动时,不会调用onCreate(),因此系统栏将保持可见。如果希望系统 UI 更改在用户在活动中导航进出时保持不变,请在onResume()onWindowFocusChanged()中设置 UI 标志。
  • 方法setSystemUiVisibility()仅在您从中调用的视图可见时才有效。
  • 导航离开视图会导致使用setSystemUiVisibility()设置的标志被清除。

使内容显示在导航栏后面

在 Android 4.1 及更高版本上,您可以将应用的内容设置为显示在导航栏后面,以便内容在导航栏隐藏和显示时不会调整大小。为此,请使用SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION。您可能还需要使用SYSTEM_UI_FLAG_LAYOUT_STABLE来帮助应用维护稳定的布局。

当您使用此方法时,您有责任确保应用 UI 的关键部分不会被系统栏覆盖。有关此主题的更多讨论,请参阅隐藏状态栏课程。