HarmonyOS 鸿蒙Next应用页面亮度调节指导
HarmonyOS 鸿蒙Next应用页面亮度调节指导
问题背景
目前单框架上的亮度调节接口是绑定在window上,而非具体页面上,如果一个页面A调节了亮度,在页面A返回后,如果没有做恢复操作,跳转/返回到页面B后,还会保持该亮度,导致页面亮度和预期可能不符,针对该背景,总结了三类应用场景:
场景一(调整亮度页面退出后其他页面仍为系统亮度)
如上图,每次进入和退出页面都恢复到系统默认亮度。
关键解决方法(通过UIObserver实现页面跳转监听)
uiObserver.on(‘navDestinationUpdate’, (info)=>{})
当页面使用Navigation进行路由跳转时,可使用observer.on(‘navDestinationUpdate’)来实现路由页面声明周期的监听,并进行做统一处理。
实现方案
1、通过自定义函数ResetBrightness将亮度设置成默认值,实际调用windowClass.setWindowBrightness(-1)将亮度设置成系统默认亮度,如果要设置具体亮度,可以自行添加入参(0到1)。
// 抽出公共能力代码
import { window } from ‘@kit.ArkUI’;
// 重置亮度到默认值
export function ResetBrightness() {
window.getLastWindow(getContext(), (err, windowClass) => {
const errCode = err.code;
if (errCode) {
console.log(‘window:’, JSON.stringify(err))
return;
}
// 设置默认亮度
windowClass.setWindowBrightness(-1);
})
}
2、在onWindowStageCreate中通过uiObserver监听navDestinationUpdate事件,并在状态uiObserver.NavDestinationState.ON_WILL_HIDE(页面隐藏)时触发。
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
windowStage.loadContent(‘pages/Index’, (err) => {
if (err.code) {
hilog.error(0x0000, ‘testTag’, ‘Failed to load the content. Cause: %{public}s’, JSON.stringify(err) ?? ‘’);
return;
}
hilog.info(0x0000, ‘testTag’, ‘Succeeded in loading the content.’);
});
// 使用uiObserver监听navDestinationUpdate事件
uiObserver.on(‘navDestinationUpdate’, (info) => {
// 监听ON_WILL_HIDE状态,如果想过滤特定页面,可以使用info.name来进行过滤
if (info.state == uiObserver.NavDestinationState.ON_WILL_HIDE) {
// 重置亮度到默认值
ResetBrightness();
}
});
}
场景二(页面进入后,自动调节成页面之前保存的亮度)
实现方案
1、保存每个页面的亮度(如果页面有设置的情况下)到存储对象中,比如AppStorage。
2、在页面ON_WILL_SHOW中增加亮度恢复逻辑(如果有保存指定页面的亮度,则主动设置成该亮度,否则设置成默认亮度即可)。
// 同2.2中第二部分,使用uiObserver监听navDestinationUpdate事件
uiObserver.on(‘navDestinationUpdate’, (info) => {
// 监听ON_WILL_SHOW状态,如果想过滤特定页面,可以使用info.name来进行过滤
if (info.state == uiObserver.NavDestinationState.ON_WILL_SHOW && info.name == ‘页面B’) {
// 恢复之前亮度
ResetPreBrightness();
}
})
场景三(页面进入后,自动调节成确定值(最高)亮度)
同场景一,如上图只需要在ON_WILL_SHOW状态中,手动设置成最亮即可,注意需要在ON_WILL_HIDE时恢复默认亮度,针对特定页面可以在uiObserver中通过info.name判断页面(比如二维码收付款页面)。
// 使用uiObserver监听navDestinationUpdate事件
uiObserver.on(‘navDestinationUpdate’, (info) => {
// 监听ON_WILL_HIDE状态,如果想过滤特定页面,可以使用info.name来进行过滤
if (info.state == uiObserver.NavDestinationState.ON_WILL_HIDE) {
// 重置亮度到默认值
ResetBrightness();
}
if (info.state == uiObserver.NavDestinationState.ON_WILL_SHOW && info.name == ‘页面B’) {
// 调整最大亮度
SetMaxBrightness();
}
});
更多关于HarmonyOS 鸿蒙Next应用页面亮度调节指导的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next应用页面亮度调节指导的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
作为IT专家,针对HarmonyOS 鸿蒙Next应用页面亮度调节,提供以下指导:
- 控制中心调节:从屏幕顶部下滑出控制中心,拖移亮度滑块即可调整屏幕亮度。
- 设置调节:进入“设置”>“显示和亮度”,在此界面中拖移滑块同样可以调整屏幕亮度。
- 自动调节:在“设置”>“显示和亮度”中,开启“自动调节”功能,手机会根据周围光线的变化自动调节屏幕亮度。
- 护眼模式:护眼模式不仅能有效减少蓝光对眼睛的刺激,还能调节屏幕亮度。快捷操作是从屏幕顶部右侧下滑出控制中心,点击展开快捷开关栏,点亮护眼模式即可。全天或定时开启护眼模式可通过“设置”>“显示和亮度”>“护眼模式”进行设置。
- 编程方式调节:对于开发者,可以使用ArkUI的window模块中的setWindowBrightness方法,异步设置窗口的亮度值,取值范围为0.0~1.0,1.0表示最亮。
需要注意的是,HarmonyOS 鸿蒙Next系统并未直接支持通过音量键或触摸屏侧边滑动来调整屏幕亮度。此外,在应用中,如果一个页面调节了亮度,在页面返回后,如果没有做恢复操作,跳转或返回到其他页面后,还会保持该亮度,这可能导致页面亮度和预期不符。开发者可以通过编程方式解决该问题。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html