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调用,简化了状态栏样式的管理复杂度,使开发者可以更专注于业务逻辑实现,同时保证了代码的可维护性和扩展性。
相关推荐
万少2 分钟前
第五款 HarmonyOS 上架作品 奇趣故事匣 来了
前端·harmonyos·客户端
OpenGL8 分钟前
Android targetSdkVersion升级至35(Android15)相关问题
前端
rzl0224 分钟前
java web5(黑马)
java·开发语言·前端
Amy.Wang25 分钟前
前端如何实现电子签名
前端·javascript·html5
今天又在摸鱼28 分钟前
Vue3-组件化-Vue核心思想之一
前端·javascript·vue.js
蓝婷儿30 分钟前
每天一个前端小知识 Day 21 - 浏览器兼容性与 Polyfill 策略
前端
百锦再32 分钟前
Vue中对象赋值问题:对象引用被保留,仅部分属性被覆盖
前端·javascript·vue.js·vue·web·reactive·ref
jingling55536 分钟前
面试版-前端开发核心知识
开发语言·前端·javascript·vue.js·面试·前端框架
拾光拾趣录41 分钟前
CSS 深入解析:提升网页样式技巧与常见问题解决方案
前端·css
莫空000042 分钟前
深入理解JavaScript属性描述符:从数据属性到存取器属性
前端·面试