System UI Flag

目录

简介

在Android 3.0(11)之后,Android提供了setSystemUiVisibility方法,这个方法的作用是可以通过一个flag配置更改状态栏或其他屏幕/窗口装饰的可见性,主要的作用是暂时隐藏掉系统栏的一些UI,让用户能够将注意力更多地集中在应用程序内容上。注意,在使用的时候,有一些flag不一定是API 11 就支持的。大部分都是在API 16的时候增加上的。
这种方式设置显示隐藏导航栏的方式,是作用在view级别的(最终都会聚合到Window起作用),跟设置Window的flag的方式相比,能够更细粒度地控制system bars。
但有一点需要注意的是,System UI Flag 这种方式,是比较容易被清除的,也就是用户的一些操作,会导致你设置的这些flag 被系统自动清除掉。能够触发这种情况的场景分为一下几类:

  • 1、触摸屏幕的任何位置;
  • 2、顶部下拉状态栏;
  • 3、底部上拉导航栏;
  • 4、Window变化(切换到其他APP、或者应用的其他界面、软键盘的弹出等)

下面会介绍一下场景的Flag,还有可能被上面这几种场景导致清除的也会简单介绍下。

常用Flag

图1
图2

Flag 作用
SYSTEM_UI_FLAG_LOW_PROFILE 调暗系统状态栏亮度,但不会隐藏,
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 允许View能够显示到状态栏的部分,这种场景并不会隐藏状态栏,因此会存在你的UI被状态栏覆盖了一部分(见图1),当然,你可以将fitSystemWindows设置为true,这样子就系统能够自动进行适配(添加状态栏对应高度的padding,见图2)
SYSTEM_UI_FLAG_FULLSCREEN 隐藏状态栏,用户的一些操作(第二、第四种),例如跳转到其他APP或者下拉显示状态栏等都会让其flag 被清除,导致状态栏显示出来。因为如果需要再切换回来的时候重新恢复,需要重新设置这个flag.
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 在不隐藏导航栏的情况下,让view 所在的window能够显示到导航栏部分,同样可以通过设置fitSystemWindows为true 让系统自动添加高度为导航栏高度的paddingBottom。
SYSTEM_UI_FLAG_HIDE_NAVIGATION 暂时隐藏导航栏,因为系统导航栏非常重要,所以用户的任何操作(上面四种),都会导致他被清除掉,导航栏会重新显示出来,这种场景下,SYSTEM_UI_FLAG_FULLSCREEN也会被同时清除,因此状态栏也会显示出来,基本上这两个都是同时使用的
SYSTEM_UI_FLAG_LOW_PROFILE 调暗系统状态栏亮度
SYSTEM_UI_FLAG_LOW_PROFILE 调暗系统状态栏亮度

当window设置WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION时,系统会自动添加SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION