调暗系统栏

本课介绍如何在 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);