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调用,简化了状态栏样式的管理复杂度,使开发者可以更专注于业务逻辑实现,同时保证了代码的可维护性和扩展性。
相关推荐
90后的晨仔17 小时前
Vue3项目全面部署指南:从构建到上线
前端·vue.js
小于小于091217 小时前
npx 与 npm 区别
前端·npm·node.js
望获linux17 小时前
【实时Linux实战系列】实时 Linux 在边缘计算网关中的应用
java·linux·服务器·前端·数据库·操作系统
qq_2529241917 小时前
PHP 8.0+ 现代Web开发实战指南 引
android·前端·php
Jeled17 小时前
Android 本地存储方案深度解析:SharedPreferences、DataStore、MMKV 全面对比
android·前端·缓存·kotlin·android studio·android jetpack
Mintopia17 小时前
🎨 AIGC 内容过滤技术:当创作的洪流遇上理性的堤坝
前端·javascript·aigc
Mintopia18 小时前
⚙️ Next.js 缓存与队列:当数据与请求跳起“低延迟之舞”
前端·全栈·next.js
Shi_haoliu18 小时前
Vue2 + Office Add-in关于用vue项目于加载项控制excel单元格内容(Demo版)
前端·javascript·vue.js·node.js·html·excel·office
IT_陈寒18 小时前
Redis 性能翻倍的 5 个隐藏技巧,99% 的开发者都不知道第3点!
前端·人工智能·后端
街尾杂货店&19 小时前
css word属性
前端·css