HarmonyOS 鸿蒙Next中为什么使用这段代码获取不到正确的状态栏文字颜色?

HarmonyOS 鸿蒙Next中为什么使用这段代码获取不到正确的状态栏文字颜色?

// 获取状态栏文字颜色
export async function getStatusBarTextColor(context: Context) {
  let color: string = '#ff0000'
  try {
    const win = await window.getLastWindow(context)
    const props = await win.getWindowSystemBarProperties()
    color = props.statusBarContentColor ?? color
    console.info('状态栏文字颜色:', color)
  } catch (e) {
    console.error('状态栏文字颜色获取失败:', e.code, e.message)
  }

  return color
}

更多关于HarmonyOS 鸿蒙Next中为什么使用这段代码获取不到正确的状态栏文字颜色?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

开发者你好,

可以参考getWindowSystemBarProperties使用示例,使用您提供的代码和上述示例代码经是可以获得正确颜色,请排查您调用时机或者传入的window是否有问题,如果还未解决,请提供可复现demo。

更多关于HarmonyOS 鸿蒙Next中为什么使用这段代码获取不到正确的状态栏文字颜色?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


getWindowSystemBarProperties() 返回的是应用自己设置的状态栏属性,而不是系统当前实际的状态栏文字颜色。

场景 返回值
应用未调用 setWindowSystemBarProperties() 设置过状态栏属性 statusBarContentColor 默认值
应用主动设置过状态栏属性 返回应用设置的值

简单来说:这个 API 是“设置什么返回什么”,而不是“获取系统当前状态”。

具体可参考:API_getWindowSystemBarProperties

如果没设置呢?

没设置的情况下,在API22测试中返回了默认值:“#FF000000”,具体情况de看报错日志跟你的环境,这样才方便定位。

但是正确使用应该是不需要加await,

await win.getWindowSystemBarProperties(); //❌
win.getWindowSystemBarProperties(); //√
//API:getWindowSystemBarProperties(): SystemBarProperties;

它本身就不是异步函数

你这段代码没有问题,如果获取失败了应该是你传的Context不对。还是要看你下你具体的错误信息。

在HarmonyOS Next中,状态栏文字颜色需通过windowStage.getMainWindow()获取Window对象,再调用setStatusBarColor()方法设置。若获取失败,可能因未在onWindowStageCreate回调中正确获取windowStage实例,或未在UIAbility中声明ohos.permission.UPDATE_SYSTEM_UI权限。请检查权限配置及窗口生命周期。

状态栏文字颜色获取问题

这段代码获取不到正确的状态栏文字颜色,原因在于getWindowSystemBarProperties()返回的属性中,已经不再包含statusBarContentColor这个字段。

在HarmonyOS Next的API中,状态栏和导航栏的系统属性已合并调整。你需要改用以下正确属性:

  1. contentColor:同时控制状态栏和导航栏的文字及图标颜色(深色/浅色模式统一)。
  2. statusBarContentColor已被废弃,从API 10+开始不再作为返回字段存在,因此在props中始终为undefined,导致你的代码永远返回默认值#ff0000

你返回的color值为#ff0000(红色),这是默认值,并非实际系统颜色。若想获取正确颜色值,应直接读取contentColor属性:

const props = await win.getWindowSystemBarProperties();
color = props.contentColor ?? color;

此外,注意statusBarContentColor在旧版本中实际上是设置方法,不是获取方法。getWindowSystemBarProperties()返回的字段名称与设置时的参数名不完全一致,这是HarmonyOS系统属性设计的常见问题。

回到顶部