HarmonyOS 鸿蒙Next应用页面亮度调节指导

HarmonyOS 鸿蒙Next应用页面亮度调节指导

问题背景

目前单框架上的亮度调节接口是绑定在window上,而非具体页面上,如果一个页面A调节了亮度,在页面A返回后,如果没有做恢复操作,跳转/返回到页面B后,还会保持该亮度,导致页面亮度和预期可能不符,针对该背景,总结了三类应用场景:

场景一(调整亮度页面退出后其他页面仍为系统亮度)

scene1.png

     

 

如上图,每次进入和退出页面都恢复到系统默认亮度。

关键解决方法(通过UIObserver实现页面跳转监听)

uiObserver.on(‘navDestinationUpdate’, (info)=>{})

当页面使用Navigation进行路由跳转时,可使用observer.on(‘navDestinationUpdate’)来实现路由页面声明周期的监听,并进行做统一处理。

实现方案

1、通过自定义函数ResetBrightness将亮度设置成默认值,实际调用windowClass.setWindowBrightness(-1)将亮度设置成系统默认亮度,如果要设置具体亮度,可以自行添加入参(01)

// 抽出公共能力代码 
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();
}
});
}

场景二(页面进入后,自动调节成页面之前保存的亮度)

scene3.png

实现方案

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();
}
})

场景三(页面进入后,自动调节成确定值(最高)亮度)

scene2.png

       同场景一,如上图只需要在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

1 回复

更多关于HarmonyOS 鸿蒙Next应用页面亮度调节指导的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


作为IT专家,针对HarmonyOS 鸿蒙Next应用页面亮度调节,提供以下指导:

  1. 控制中心调节:从屏幕顶部下滑出控制中心,拖移亮度滑块即可调整屏幕亮度。
  2. 设置调节:进入“设置”>“显示和亮度”,在此界面中拖移滑块同样可以调整屏幕亮度。
  3. 自动调节:在“设置”>“显示和亮度”中,开启“自动调节”功能,手机会根据周围光线的变化自动调节屏幕亮度。
  4. 护眼模式:护眼模式不仅能有效减少蓝光对眼睛的刺激,还能调节屏幕亮度。快捷操作是从屏幕顶部右侧下滑出控制中心,点击展开快捷开关栏,点亮护眼模式即可。全天或定时开启护眼模式可通过“设置”>“显示和亮度”>“护眼模式”进行设置。
  5. 编程方式调节:对于开发者,可以使用ArkUI的window模块中的setWindowBrightness方法,异步设置窗口的亮度值,取值范围为0.0~1.0,1.0表示最亮。

需要注意的是,HarmonyOS 鸿蒙Next系统并未直接支持通过音量键或触摸屏侧边滑动来调整屏幕亮度。此外,在应用中,如果一个页面调节了亮度,在页面返回后,如果没有做恢复操作,跳转或返回到其他页面后,还会保持该亮度,这可能导致页面亮度和预期不符。开发者可以通过编程方式解决该问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部