看似复杂的沉浸式体验设计,其实也就是在处理以下两个 System UI与用户布局(setContentView)之间说不清理还乱的关系:
- StatusBar 系统状态栏
- NavigationBar 系统导航栏
网上类似“沉浸式状态栏”的文章一搜一大把,且先不吐槽所谓的“沉浸式状态栏”说法正确与否,随便一篇文章都会告诉你,要实现沉浸式体验有两个关键地方:
window.decorView.systemUiVisibility = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or SYSTEM_UI_FLAG_LAYOUT_STABLE
window.statusBarColor = Color.TRANSPARENT
运行代码,果然实现了“沉浸式状态栏”的效果。可是我相信大多数人心里是迷糊的:
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
和SYSTEM_UI_FLAG_LAYOUT_STABLE
是什么?- 为什么要设置状态栏颜色透明?设置其他颜色不可以么?
以及接下来可能碰到的各种“沉浸式状态栏”带来的坑:
- Bull shit!用户布局 与 状态栏信息 重叠了
- 可交互按钮被手机的“刘海”给挡住了
- 状态栏上时间等信息的文字颜色是黑色,搭配上状态栏蓝色的背景,好丑啊
在讲解 沉浸式体验的实现 与 异形屏 适配前,我们需要先补下课,了解些微的基础知识:
各种Flag
STATUS_BAR_HIDDEN
/**
* Android 3.0(API 11)加入
*
* 已被废弃,现等同于 SYSTEM_UI_FLAG_LOW_PROFILE
*/
public static final int STATUS_BAR_HIDDEN = SYSTEM_UI_FLAG_LOW_PROFILE;
STATUS_BAR_VISIBLE
/**
* Android 3.0(API 11)加入
*
* 已被废弃,现等同于 SYSTEM_UI_FLAG_VISIBLE
*/
public static final int STATUS_BAR_VISIBLE = SYSTEM_UI_FLAG_VISIBLE;
SYSTEM_UI_FLAG_VISIBLE
/**
* Android 4.0(API 14)加入
*
* 表明设置系统UI(status bar等)为可见状态,
* 这也是默认效果。
*/
public static final int SYSTEM_UI_FLAG_VISIBLE = 0;
SYSTEM_UI_FLAG_LOW_PROFILE
/**
* Android 4.0(API 14)加入
*
* 低配模式,这里的低配不是传统意义上的低配置,
* 我更倾向于称其为低调模式,设置系统UI进入不显眼的“低配置”模式。
* 具体表现为:状态栏 和/或 导航栏某些图标 可能变暗
*/
public static final int SYSTEM_UI_FLAG_LOW_PROFILE = 0x00000001;
SYSTEM_UI_FLAG_HIDE_NAVIGATION
/**
* Android 4.0(API 14)加入
*
* 如果设置了 SYSTEM_UI_FLAG_LOW_PROFILE 后还是觉得系统UI显眼