HarmonyOS 鸿蒙Next中densityDPI怎么监听用户设置屏幕密度的变化

HarmonyOS 鸿蒙Next中densityDPI怎么监听用户设置屏幕密度的变化

通过 let envCallback: EnvironmentCallback
onConfigurationUpdated(config) 好像没办法实时监听

@ohos.display (屏幕属性)的densityDPI 有办法监听么

3 回复

在onPageShow生命周期获取一次屏幕密度

import display from '@ohos.display';

@Entry
@Component
struct Index {
  @State densityDPI: number = 0;
  @State densityPixels: number = 0;
  @State screenInfo: string = ''

  onPageShow(): void {
    this.getDisplayInfo()
  }

  getDisplayInfo() {
    let displayClass = display.getDefaultDisplaySync();
    this.densityPixels = displayClass.densityPixels;
    this.densityDPI = displayClass.densityDPI;
    this.screenInfo = `densityPixels:${this.densityPixels}\ndensityDPI:${this.densityDPI}`
    console.log('densityDPI is:' + displayClass.densityDPI.toString() + ' densityPixels is:' + displayClass.densityPixels.toString())
  }

  build() {
    Column() {
      Text('屏幕DPI信息')
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
        .margin({ bottom: 20 });

      Image($r('app.media.startIcon'))
        .width(100)
        .height(100)
        .margin({ bottom: 20 });

      Text(this.screenInfo)
        .fontSize(18)
        .textAlign(TextAlign.Center)
        .margin({ bottom: 20 });
    }
  }
}

更多关于HarmonyOS 鸿蒙Next中densityDPI怎么监听用户设置屏幕密度的变化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,可以通过DisplayManager模块监听屏幕密度变化。使用@ohos.display接口注册displayChange事件,具体事件类型为'densityChange'。示例代码:

import display from '@ohos.display';

display.on('densityChange', (densityDPI) => {
  // densityDPI即为变化后的屏幕密度值
});

注意:需在module.json5中声明ohos.permission.GET_DISPLAY_INFO权限。该回调会在用户修改显示设置时触发。

在HarmonyOS Next中,可以通过@ohos.display模块的on('change')事件来监听屏幕密度(densityDPI)的变化。具体实现方式如下:

  1. 首先导入display模块:
import display from '@ohos.display';
  1. 注册屏幕属性变化监听器:
display.on('change', (data) => {
  if (data.type === display.DisplayEventType.CHANGE) {
    let densityDPI = display.getDefaultDisplaySync().densityDPI;
    console.log(`屏幕密度已变化,当前值: ${densityDPI}`);
  }
});
  1. 当不再需要监听时,记得取消注册:
display.off('change');

这种方式比EnvironmentCallback更直接有效,能实时响应屏幕密度变化。注意要在页面生命周期中管理监听器的注册和注销,避免内存泄漏。

回到顶部