本课介绍如何在 Android 4.0(API 级别 14)及更高版本中调暗系统栏(即状态和导航栏)。在更早期的版本中,Android 不提供调暗系统栏的内置方式。
使用此方法时,内容大小不会调整,但系统栏中的图标会消失。用户只要轻触屏幕的状态栏或导航栏区域,这两个栏就会全面显示出来。这种方法的优点在于,这些栏仍然存在,但是它们的详细信息被遮盖,不仅可以在打造沉浸式体验,而且不影响用户轻松访问这些栏。
调暗状态栏和导航栏
您可以使用 SYSTEM_UI_FLAG_LOW_PROFILE
标记调暗状态栏和通知栏,如下所示:
Kotlin
// This example uses decor view, but you can use any visible view. activity?.window?.decorView?.apply { systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE }
Java
// This example uses decor view, but you can use any visible view. View decorView = getActivity().getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_LOW_PROFILE; decorView.setSystemUiVisibility(uiOptions);
用户只要轻触状态栏或导航栏,此标记即会被清除,从而使这些栏显示出来。标记被清除后,如果您希望再次调暗这些栏,应用需要重置该标记。
图 1 显示了一张导航栏已变暗的图库图片(请注意,“图库”应用会完全隐藏状态栏,而不会将其调暗)。请注意,导航栏(图片右侧)上有微弱的白点,表示导航控件:
图 1. 调暗的系统栏。
图 2 所示为同一图库图片,但显示了系统栏:
图 2. 可见的系统栏。
显示状态栏和导航栏
如果您希望以编程方式清除通过 setSystemUiVisibility()
设置的标记,可按下方所示执行该操作:
Kotlin
activity?.window?.decorView?.apply { // Calling setSystemUiVisibility() with a value of 0 clears // all flags. systemUiVisibility = 0 }
Java
View decorView = getActivity().getWindow().getDecorView(); // Calling setSystemUiVisibility() with a value of 0 clears // all flags. decorView.setSystemUiVisibility(0);