沉浸式体验三:导航栏

导航

  • 导航栏的隐藏
    • 隐藏导航栏
    • 显示内容在导航栏下

导航栏的隐藏

此文主要描述如何在 API level 14 及以上去隐藏导航栏,建议同时搭配 隐藏状态栏 使用以达到更好的沉浸式体验。

沉浸式体验三:导航栏_第1张图片
图一.导航栏

隐藏导航栏


可以通过设置标志 SYSTEM_UI_FLAG_HIDE_NAVIGATION 来隐藏导航栏,下面的示例代码同时隐藏了状态栏:

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 标志位的位置会产生不同的效果。比如在 activity 的 onCreate() 方法中隐藏系统栏后,用户点击了 Home 键,系统栏就会再次出现,当用户再次打开该 activity 的时候,因为 onCreate() 不会被再次调用,所以系统栏就不会不执行隐藏。如果想要一直保持系统栏的不可见,那就应该在 onResume() 或者 onWidowFocusChange() 中设置 UI 标志位。
  • setSystemUiVisibility() 方法只有当调用该方法的视图 view 可见的时候才会生效。
  • 导航离开该页面会导致该视图 view 通过 setSystemUiVisibility() 设置的标志位被清除。

显示内容在导航栏下

在 Android 4.1 及以上版本中,可以实现应用内容显示在导航栏下,这样内容大小就不会当导航栏显示或隐藏时产生改变。为了实现这种效果,使用 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 标志,同时为了布局稳定性再增加 SYSTEM_UI_FLAG_LAYOUT_STABLE 标志。

当采用此方式时,同样要像隐藏状态栏一样,注意关键内容不会被导航栏遮挡。

你可能感兴趣的:(沉浸式体验,沉浸式,导航栏)