HarmonyOS 鸿蒙Next屏幕尺寸和像素密度转换工具类,包含了像素密度(ppi)计算、每厘米对应的viewport单位数计算

发布于 1周前 作者 nodeper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next屏幕尺寸和像素密度转换工具类,包含了像素密度(ppi)计算、每厘米对应的viewport单位数计算。

import { display } from '@kit.ArkUI';
import deviceInfo from '@ohos.deviceInfo';


@Entry
@Component
struct Page41 {
  build() {
    Column() {
      Button('测试').onClick(() => {
        const displayInfo = display.getDefaultDisplaySync();
        // console.log(`displayInfo:${JSON.stringify(displayInfo)}`);
        const dpiToCm = 2.54; // 1英寸 = 2.54厘米

        // 将像素转换为厘米
        const widthInches = displayInfo.width / displayInfo.densityDPI;
        const heightInches = displayInfo.height / displayInfo.densityDPI;
        const widthCm = widthInches * dpiToCm;
        const heightCm = heightInches * dpiToCm;

        // 使用勾股定理计算对角线英寸
        const diagonalInches = Math.sqrt(
          Math.pow(widthInches, 2) + Math.pow(heightInches, 2)
        );

        console.log(`当前设备:${deviceInfo.marketName}`);
        console.log(`屏幕宽度(像素): ${displayInfo.width}px`);
        console.log(`屏幕高度(像素): ${displayInfo.height}px`);
        console.log(`屏幕密度(dpi): ${displayInfo.densityDPI}dpi`);
        console.log(`屏幕宽度(厘米): ${widthCm.toFixed(2)}cm`);
        console.log(`屏幕高度(厘米): ${heightCm.toFixed(2)}cm`);
        console.log(`屏幕对角线尺寸(英寸): ${diagonalInches.toFixed(2)}英寸`);
      })
    }
    .height('100%')
    .width('100%')
  }
}
6 回复
手机尺寸怎么获取呢

看你要什么单位了,如果尺寸指的是px单位,可以 import { display } from ‘@kit.ArkUI’ display.getDefaultDisplaySync().width display.getDefaultDisplaySync().height

你代码中的 const screenDiagonalInch = 6.69;是写死的么,华为肯定还有其他尺寸的手机呢

可以不写死,用官方给的方法进行计算,但官方给的dpi计算密度不太准。参考2楼代码。

import { display } from '@kit.ArkUI';
import deviceInfo from '@ohos.deviceInfo';


@Entry
@Component
struct Page41 {
  build() {
    Column() {
      Button('测试').onClick(() => {
        const displayInfo = display.getDefaultDisplaySync();
        // console.log(`displayInfo:${JSON.stringify(displayInfo)}`);
        const dpiToCm = 2.54; // 1英寸 = 2.54厘米

        // 将像素转换为厘米
        const widthInches = displayInfo.width / displayInfo.densityDPI;
        const heightInches = displayInfo.height / displayInfo.densityDPI;
        const widthCm = widthInches * dpiToCm;
        const heightCm = heightInches * dpiToCm;

        // 使用勾股定理计算对角线英寸
        const diagonalInches = Math.sqrt(
          Math.pow(widthInches, 2) + Math.pow(heightInches, 2)
        );

        console.log(`当前设备:${deviceInfo.marketName}`);
        console.log(`屏幕宽度(像素): ${displayInfo.width}px`);
        console.log(`屏幕高度(像素): ${displayInfo.height}px`);
        console.log(`屏幕密度(dpi): ${displayInfo.densityDPI}dpi`);
        console.log(`屏幕宽度(厘米): ${widthCm.toFixed(2)}cm`);
        console.log(`屏幕高度(厘米): ${heightCm.toFixed(2)}cm`);
        console.log(`屏幕对角线尺寸(英寸): ${diagonalInches.toFixed(2)}英寸`);
      })
    }
    .height('100%')
    .width('100%')
  }
}

在HarmonyOS中,针对屏幕尺寸和像素密度(PPI)的转换,你可以通过Display类获取屏幕的物理尺寸和分辨率,进而计算PPI。对于viewport单位,通常与CSS像素相关,可通过Configuration类获取屏幕密度(densityDpi),进而估算每厘米对应的viewport单位。

封装此类工具时,注意处理不同屏幕密度的适配问题。示例代码需自行实现逻辑,如使用Display.getSize()获取尺寸,Display.getMetrics()获取密度等。

如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部