HarmonyOS5 状态栏文字颜色设置工具封装解析~

一、工具类核心作用

本工具类通过封装鸿蒙窗口管理能力,提供状态栏文字颜色快速切换功能,支持深色(黑色)和浅色(白色)两种模式,适用于需要动态适配不同主题场景的鸿蒙应用开发。

浅色模式

深色模式

二、代码结构解析

javascript 复制代码
import { CONTEXT } from "../constants";
import { window } from "@kit.ArkUI";
class StatusBar {
  // 设置深色模式(黑色文字)
  setDarkBar() {
    this.setBar({ statusBarContentColor: '#000000' });
  }

  // 设置浅色模式(白色文字)
  setLightBar() {
    this.setBar({ statusBarContentColor: '#ffffff' });
  }

  // 核心设置方法
  async setBar(config: window.SystemBarProperties) {
    const ctx = AppStorage.get<Context>(CONTEXT);
    if (ctx) {
      const win = await window.getLastWindow(ctx);
      win.setWindowSystemBarProperties(config);
    }
  }
}

export const statusBar = new StatusBar();

1. 上下文获取

  • 通过AppStorage获取全局存储的Context对象
  • 需在应用启动时注入上下文(参考EntryAbility初始化):
javascript 复制代码
// EntryAbility.ets
onWindowStageCreate(windowStage: window.WindowStage) {
  AppStorage.setOrCreate(CONTEXT, this.context);
}

2. 窗口对象操作

  • 使用window.getLastWindow()获取当前窗口实例
  • 调用setWindowSystemBarProperties设置系统栏属性

3. 颜色配置参数

  • statusBarContentColor:控制状态栏文字/图标颜色
  • 支持HEX、RGB等颜色格式
  • 扩展能力:可配置其他系统栏属性(如背景色、透明度)

四、使用示例

less 复制代码
// 在页面生命周期中调用
@Entry
@Component
struct HomePage {
  aboutToAppear() {
    // 根据页面背景色动态切换
    statusBar.setLightBar(); // 白色文字
    // 或
    statusBar.setDarkBar();  // 黑色文字
  }

  build() {
    // 页面内容...
  }
}

五、注意事项

1. 上下文依赖

  • 必须确保CONTEXT在AppStorage中正确初始化
  • 建议在EntryAbility的onWindowStageCreate阶段注入

2. 异步处理

  • getLastWindow为异步操作,需使用async/await
  • 推荐在页面生命周期(如aboutToAppear)调用

3. 颜色适配建议

  • 深色模式建议搭配浅色状态栏背景
  • 浅色模式建议搭配深色状态栏背景
  • 可通过组合设置实现沉浸式状态栏:
php 复制代码
win.setWindowSystemBarProperties({
  statusBarContentColor: '#ffffff',
  statusBarColor: '#000000'
});

4. 兼容性说明

  • 适用于HarmonyOS 5.0.0+版本
  • 需在module.json5配置状态栏可见性:
json 复制代码
"abilities": [{
  "name": "EntryAbility",
  "visible": true,
  "window": {
    "statusBarVisibility": "visible"
  }
}]
该封装方案通过抽象系统API调用,简化了状态栏样式的管理复杂度,使开发者可以更专注于业务逻辑实现,同时保证了代码的可维护性和扩展性。
相关推荐
mldong7 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排8 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60618 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角9 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!10 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰10 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi11 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen12 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马13 小时前
AI源码分析:拆解模型底层实现逻辑
前端
IT_陈寒13 小时前
React子组件莫名其妙重渲染?你可能漏了这个Hook
前端·人工智能·后端