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调用,简化了状态栏样式的管理复杂度,使开发者可以更专注于业务逻辑实现,同时保证了代码的可维护性和扩展性。
相关推荐
Ziky学习记录10 分钟前
从零到实战:React Router 学习与总结
前端·学习·react.js
wuhen_n16 分钟前
JavaScript链表与双向链表实现:理解数组与链表的差异
前端·javascript
wuhen_n20 分钟前
JavaScript数据结构深度解析:栈、队列与树的实现与应用
前端·javascript
狗哥哥41 分钟前
微前端路由设计方案 & 子应用管理保活
前端·架构
前端大卫1 小时前
Vue3 + Element-Plus 自定义虚拟表格滚动实现方案【附源码】
前端
却尘2 小时前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js
ccnocare2 小时前
浅浅看一下设计模式
前端
Lee川2 小时前
🎬 从标签到屏幕:揭秘现代网页构建与适配之道
前端·面试
Ticnix2 小时前
ECharts初始化、销毁、resize 适配组件封装(含完整封装代码)
前端·echarts
纯爱掌门人2 小时前
终焉轮回里,藏着 AI 与人类的答案
前端·人工智能·aigc