文章目录背景方法总览屏幕亮度控制setWindowBrightness(brightness) — 设置亮度恢复系统默认亮度getBrightness() — 读取当前亮度灰阶控制setWindowGrayScale(grayScale) — 设置灰阶恢复彩色实际使用场景举例同步 vs 异步别搞混了写在最后背景近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓做 HarmonyOS 应用的时候遇到过两个需求让我卡了一会儿一个是阅读类页面要调低屏幕亮度另一个是做哀悼模式要把整个界面变成灰色。这两件事用WindowUtil做其实非常简单专门写一篇记录一下。方法总览屏幕亮度控制setWindowBrightness(brightness) — 设置亮度// 通过滑块控制亮度值0~1之间StatebrightnessValue:number0.5;// 亮度滑块Slider({value:this.brightnessValue*100,min:0,max:100,step:1}).width(100%).showTips(true).onChange(v{this.brightnessValuev/100;})// 设置亮度this.Btn(setBrightness(${this.brightnessValue.toFixed(2)}),#F39C12,(){WindowUtil.setWindowBrightness(this.brightnessValue).then((){this.addLog(setWindowBrightness(${this.brightnessValue.toFixed(2)}) → 成功);}).catch((e:Error){this.addLog(Error:${e.message});});})参数范围是0.0到1.0其中0.0 最暗但不是完全黑屏1.0 最亮0.5 中等亮度setWindowBrightness是异步方法需要.then()处理结果或者用async/await。注意这里调的是应用窗口亮度不是系统全局亮度。也就是说只在你的应用里生效退出应用后会恢复。恢复系统默认亮度如果想把亮度还给系统控制用户在系统设置里调的那个亮度传-1.0this.Btn(setWindowBrightness(-1.0) 恢复默认,#E67E22,(){WindowUtil.setWindowBrightness(-1.0).then((){this.addLog(setWindowBrightness(-1.0) 恢复默认亮度);}).catch((e:Error){this.addLog(Error:${e.message});});})这个-1.0是特殊值代表跟随系统不是真的设置亮度为负数。getBrightness() — 读取当前亮度this.Btn(getBrightness() 当前亮度,#D35400,(){try{this.addLog(getBrightness() →${WindowUtil.getBrightness()});}catch(e){this.addLog(Error:${e});}})这是同步方法直接返回当前亮度值。如果没有手动设置过返回-1表示跟随系统。灰阶控制灰阶Gray Scale控制是比较少见但很实用的功能常见于特殊节日的哀悼模式整个界面变灰无障碍功能色盲友好模式应用内的黑白滤镜效果setWindowGrayScale(grayScale) — 设置灰阶StategrayScaleValue:number0;// 灰阶滑块Slider({value:this.grayScaleValue*100,min:0,max:100,step:1}).width(100%).showTips(true).onChange(v{this.grayScaleValuev/100;})this.Btn(setWindowGrayScale(${this.grayScaleValue.toFixed(2)}),#7F8C8D,(){WindowUtil.setWindowGrayScale(this.grayScaleValue).then((){this.addLog(setWindowGrayScale(${this.grayScaleValue.toFixed(2)}) → 成功);}).catch((e:Error){this.addLog(Error:${e.message});});})参数范围同样是0.0到1.00.0 彩色正常状态1.0 完全灰阶黑白效果中间值 部分去色恢复彩色this.Btn(setWindowGrayScale(0) 恢复彩色,#95A5A6,(){WindowUtil.setWindowGrayScale(0).then((){this.grayScaleValue0;this.addLog(setWindowGrayScale(0) → 恢复彩色);}).catch((e:Error){this.addLog(Error:${e.message});});})传0就恢复彩色很简单。注意这里同时也把grayScaleValue状态变量重置为0让 UI 上的滑块同步归零。实际使用场景举例场景1阅读模式用户进入阅读页面时自动把亮度调低一点减少眼睛疲劳aboutToAppear(){// 进入阅读模式亮度调到40%WindowUtil.setWindowBrightness(0.4);}aboutToDisappear(){// 离开时恢复系统亮度WindowUtil.setWindowBrightness(-1.0);}场景2清明节等特殊日期灰阶aboutToAppear(){consttodaynewDate();constmonthtoday.getMonth()1;constdaytoday.getDate();// 清明节前后几天开启灰阶if(month4day4day6){WindowUtil.setWindowGrayScale(1.0);}}同步 vs 异步别搞混了方法类型注意事项setWindowBrightness()异步返回 Promise需要.then()/awaitsetWindowGrayScale()异步返回 Promise需要.then()/awaitgetBrightness()同步直接拿返回值套try/catch写在最后亮度和灰阶这两个功能平时不一定用但要用的时候如果不知道有现成封装容易去找一堆复杂的原生 API。用WindowUtil记住三个方法就够了setWindowBrightness、getBrightness、setWindowGrayScale。异步的用.then()同步的直接拿值。