文档管理中心

沉浸式状态栏深色模式下显示不清晰

问题现象

应用使用白色主题背景图,在深色模式下,状态栏看不清。

如下图所示(左边是正常模式,右边是深色模式):

背景知识

  1. 沉浸式页面实现:沉浸式页面开发常通过将应用页面延伸到状态栏和导航栏的方式,来为用户提供更好的视觉体验。
  2. 深色模式适配:深色模式,是与日常应用使用过程中的浅色模式相对应的一种UI主题。相较浅色模式更加柔和,能减少亮度对用户眼睛造成的刺激和疲劳,此外深色模式能在一定程度上降低应用功耗,提升续航表现。

问题定位

  1. 在应用启动以及切换到该页面的日志里检索关键字“SetLayoutFullScreen”:
    收起
    自动换行
    深色代码主题
    复制
    1. 34359-34359 C04209/com.xx...xx/WMSImms com.xx...xx I [] SetLayoutFullScreen(2088): winId:1044 xx0 status:1
    或者在代码中排查“setWindowLayoutFullScreen”接口:
    收起
    自动换行
    深色代码主题
    复制
    1. windowClass?.setWindowLayoutFullScreen(true).then(() => {
    2. hilog.info(0x0000, 'testTag', 'Succeeded in setting full-screen mode.');
    3. }).catch((err: BusinessError) => {
    4. hilog.error(0x0000, 'testTag', `Failed to set full-screen mode. Code: ${err.code}, message: ${err.message}`);
    5. });

    表明应用开启了全屏沉浸式,需要屏蔽应用内深色模式,或者对深色模式进行适配。

  2. 开启深色模式时,检索日志“UpdateDefaultStatusBarColor”:
    收起
    自动换行
    深色代码主题
    复制
    1. 50731-50731 C04209/com.xx...xx/WMSImms com.xx...xx I [] UpdateDefaultStatusBarColor(711): winId: 1045, type: 1, colorMode: dark

    表明状态栏进入了深色模式,图标和字体颜色会由默认的黑色变成白色,在应用白色背景下,显示不清晰。

分析结论

由于应用启用了全屏沉浸式并且页面使用了白色背景,在没有对深色模式适配的情况下,状态栏图标和字体在深色模式会变成白色,导致该问题。

修改建议

应用需要屏蔽深色模式,或者适配深色模式。
  • 屏蔽深色模式:在应用启动时或者在页面内,固定应用窗口为浅色模式。以启动时为例,在onCreate生命周期回调适配:参考应用主动设置深浅色模式。
  • 适配深色模式,在深色模式下,替换背景图为深色背景,或者设置状态栏为其他对比明显的颜色。参考状态栏适配。