欢迎光临
我们一直在努力

HarmonyOS WindowUtil 窗口背景色设置:setWindowBackgroundColor 颜色格式与透明效果详解

文章目录

    • 背景
      • 方法总览
      • setWindowBackgroundColor — 设置窗口背景色
      • 颜色格式说明
      • 透明窗口的应用场景
      • setWindowBackgroundColor 是同步方法
      • 和 isTransparent() 配合使用
      • 实际使用建议
      • 写在最后

背景

近期发现一款很有意思的HarmonyOS 三方库, 地址 @pura/harmony-utils(V1.4.0) , 作者是"桃花镇童长老", 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦

案例demo导航展示

↓↓↓↓↓↓接下来言归正传 ↓↓↓

做 HarmonyOS 应用的时候,有时候需要让窗口背景色和页面内容完美融合,或者做半透明、全透明效果的弹窗。

WindowUtil.setWindowBackgroundColor() 专门处理这个需求。

方法总览

setWindowBackgroundColor — 设置窗口背景色

// 设置白色背景
Button('#FFFFFFFF').layoutWeight(1).height(36).fontSize(12).fontColor('#333')
.backgroundColor('#FFFFFFFF').borderRadius(6)
.onClick(() => {
try {
WindowUtil.setWindowBackgroundColor('#FFFFFFFF');
this.addLog('setWindowBackgroundColor("#FFFFFFFF")');
} catch (e) { this.addLog(`Error: ${e}`); }
})

// 设置深色背景
Button('#FF2C3E50').layoutWeight(1).height(36).fontSize(12).fontColor('#fff')
.backgroundColor('#2C3E50').borderRadius(6)
.onClick(() => {
try {
WindowUtil.setWindowBackgroundColor('#FF2C3E50');
this.addLog('setWindowBackgroundColor("#FF2C3E50") 深色');
} catch (e) { this.addLog(`Error: ${e}`); }
})

// 设置全透明背景
Button('#00000000').layoutWeight(1).height(36).fontSize(12).fontColor('#333')
.backgroundColor('#F0F0F0').borderRadius(6).border({ width: 1, color: '#ddd' })
.onClick(() => {
try {
WindowUtil.setWindowBackgroundColor('#00000000');
this.addLog('setWindowBackgroundColor("#00000000") 全透明');
} catch (e) { this.addLog(`Error: ${e}`); }
})

颜色格式说明

setWindowBackgroundColor 接受 #AARRGGBB 格式的颜色字符串:

部分含义示例
AA Alpha(透明度) FF=不透明,00=全透明,80=半透明
RR Red(红色通道) FF=最大红
GG Green(绿色通道) 00=无绿
BB Blue(蓝色通道) E5=偏蓝

常用颜色值速查:

颜色色值说明
纯白(不透明) #FFFFFFFF AA=FF
纯黑(不透明) #FF000000 AA=FF
全透明 #00000000 AA=00
半透明黑 #80000000 AA=80(约50%)
深色主题背景 #FF2C3E50 深蓝灰色

透明窗口的应用场景

设置 #00000000(全透明)后,窗口背景完全透明,可以看到后面的内容。

这在以下场景很有用:

  • 悬浮窗:窗口内容悬浮在其他应用上方,背景不遮挡
  • 弹窗效果:结合遮罩层做自定义弹窗
  • 动画过渡:页面切换动画时临时透明

setWindowBackgroundColor 是同步方法

注意这个方法是同步的,不需要 .then():

try {
WindowUtil.setWindowBackgroundColor('#FFFFFFFF');
// 执行到这里说明设置成功
} catch (e) {
// 设置失败,比如颜色格式不对
console.error('设置背景色失败:', e);
}

如果传入的颜色格式不正确,会抛出异常,所以记得包 try/catch。

和 isTransparent() 配合使用

设置透明背景后,可以用 isTransparent() 验证:

// 先设置透明
WindowUtil.setWindowBackgroundColor('#00000000');

// 再查询是否透明
try {
this.addLog(`isTransparent() → ${WindowUtil.isTransparent()}`);
} catch (e) {
this.addLog(`Error: ${e}`);
}

实际使用建议

1. 亮色/暗色模式适配

// 根据系统主题设置背景色
const isDarkMode = (getContext() as common.UIAbilityContext).config.colorMode ===
ConfigurationConstant.ColorMode.COLOR_MODE_DARK;

if (isDarkMode) {
WindowUtil.setWindowBackgroundColor('#FF1A1A2E');
} else {
WindowUtil.setWindowBackgroundColor('#FFFFFFFF');
}

2. 页面切换时的背景色

有些页面需要特殊背景色(比如深色视频播放页),进入时设置,离开时恢复:

aboutToAppear() {
try {
WindowUtil.setWindowBackgroundColor('#FF000000'); // 黑色背景
} catch (e) {}
}

aboutToDisappear() {
try {
WindowUtil.setWindowBackgroundColor('#FFFFFFFF'); // 恢复白色
} catch (e) {}
}

写在最后

setWindowBackgroundColor 看起来简单,但颜色格式容易记混。

记住关键点:格式是 #AARRGGBB,AA 是透明度,FF=不透明,00=全透明。

全透明 #00000000 是最常用的特殊值,用于做悬浮效果;白色 #FFFFFFFF 是默认值,深色 #FF000000 或 #FF1A1A2E 用于暗色主题页面。

赞(0)
未经允许不得转载:171主机测评 » HarmonyOS WindowUtil 窗口背景色设置:setWindowBackgroundColor 颜色格式与透明效果详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址