【鸿蒙】一文秒懂像素单位px、vp、fp、lpx

鸿蒙方舟框架为开发者提供了4种像素单位,即:px、vp、fp、lpx。并且框架采用vp为基准数据单位。

一、基本介绍

  1. px (Pixels) :
  • 定义:px代表屏幕上的像素点,是手机屏幕分辨率的单位,即屏幕物理像素单位。
  • 特点:由于不同手机的屏幕大小和分辨率存在差异,px单位在不同手机上的实际大小也会有所不同,这导致了其适配性相对较差。
  • 适用场景:当设计需要与具体像素尺寸相关,或者在不同设备和屏幕分辨率上需要一致的表现时使用。在视网膜或高清屏幕上可能需要额外的考虑。
  1. vp (Viewport Percentage) :
  • 定义:vp是视口百分比单位,基于视口(即浏览器窗口)的宽度或高度,屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素,当数值不带单位时,默认单位vp。在实际宽度为1440物理像素的屏幕上,1vp约等于3px。
  • 特点:它允许组件的大小根据视口的大小动态调整。
  • 适用场景:常用于响应式设计,确保组件在不同屏幕尺寸上保持相对大小。
  • 温馨提示:vp是默认像素单位。
  1. fp (Font Size Percentage) :
  • 定义:字体像素,是字体大小百分比单位,基于父元素的字体大小,与vp类似适用屏幕密度变化,随系统字体大小设置变化。
  • 特点:它允许组件的大小相对于父元素的字体大小进行调整。
  • 适用场景:在响应式设计中特别有用,可以确保组件与文本内容保持适当的比例。
  1. lpx (Logical Pixels) :
  • 定义 :lpx是逻辑像素单位,用于解决不同设备分辨率和像素密度的问题,lpx单位为实际屏幕宽度与逻辑宽度(通过designWidth配置)的比值,designWidth默认值为720。当designWidth为720时,在实际宽度为1440物理像素的屏幕上,1lpx为2px大小。
  • 特点:它基于设备的像素密度进行转换,以提供一致的视觉尺寸。
  • 适用场景:当需要确保组件在不同设备(如桌面、平板、手机等)上看起来一致时使用。

二、px与其他像素单位之间的转换

下面的转换api均是从API version 9开始,并且各接口支持在ArkTS卡片中使用。

接口 描述
vp2px(value : number) : number 将vp单位的数值转换为以px为单位的数值。
px2vp(value : number) : number 将px单位的数值转换为以vp为单位的数值。
fp2px(value : number) : number 将fp单位的数值转换为以px为单位的数值。
px2fp(value : number) : number 将px单位的数值转换为以fp为单位的数值。
lpx2px(value : number) : number 将lpx单位的数值转换为以px为单位的数值。
px2lpx(value : number) : number 将px单位的数值转换为以lpx为单位的数值。

使用场景举例,需要展示的控件要求如下:

  1. Text组件,文案是'胡汉三'。
  2. 组件宽度是120。
  3. 控件距离屏幕右侧的距离为0,即控件右侧贴着屏幕右侧。距离顶部距离64。
  4. 使用绝对定位,不使用相对位置设置。

思路:

  1. 声明Text控件,并设置固定宽度为120。
  2. 通过display拿到屏幕宽度,由于拿到的屏宽是px单位的,所以需要通过px2vp接口将px转换为vp。
  3. 设置控件的绝对位置的锚点。即:x=屏幕宽度-控件宽度,y=64.

代码:

typescript 复制代码
import display from '@ohos.display';

@Entry
@Component
struct DisaplayTestPage {
  build() {
    Column() {
      Text('胡汉三')
        .fontSize(20)
        .width(120)
        .fontWeight(FontWeight.Bold)
        .position({ x: px2vp(display.getDefaultDisplaySync().width) - 120, y: 64 })
        .backgroundColor(Color.Green)
    }
    .width('100%')
    .height('100%')
  }
}

运行代码结果: 注意:获取屏幕宽高必须用模拟器和真机调试,不能用Previewer 调试,用Previewer获取到的数值会是0.

三、总结

在实际开发中,这些转换函数的使用非常简单。开发者只需在编写UI界面代码时,调用相应的转换函数,并将需要转换的数值作为参数传入即可。鸿蒙系统会根据设备的实际情况自动进行单位转换,从而确保界面的一致性和适配性。

需要注意的是,随着鸿蒙系统的不断更新和演进,这些转换函数可能会发生变化。因此,建议开发者在编写代码时,始终查阅最新的官方文档或API参考,以获取最新的转换方法和最佳实践。

总之,通过鸿蒙系统提供的单位转换函数,开发者可以轻松地实现不同单位之间的转换,从而构建出在不同设备和屏幕尺寸上都能良好运行的UI界面。这不仅提高了开发效率,也提升了用户体验。

相关推荐
轻口味8 分钟前
【每日学点鸿蒙知识】私仓搭建、resources创建文件夹、hvigor如何动态设置版本、SM3摘要算法、SP存储报错等
华为·json·harmonyos
JasonYin~1 小时前
HarmonyOS NEXT 实战之元服务:静态案例效果---查看国际航班服务
华为·harmonyos
深海的鲸同学 luvi1 小时前
【HarmonyOS NEXT】hdc环境变量配置
linux·windows·harmonyos
Freerain997 小时前
鸿蒙Next ArkTS语法适配背景概述
华为·harmonyos
他的猫哎7 小时前
鸿蒙 Navigation组件下的组件获取pageStack问题
harmonyos·鸿蒙
雨汨7 小时前
鸿蒙之路的坑
华为·harmonyos
轻口味8 小时前
【每日学点鸿蒙知识】沙箱目录、图片压缩、characteristicsArray、gm-crypto 国密加解密、通知权限
pytorch·华为·harmonyos
xo1988201112 小时前
鸿蒙人脸识别
redis·华为·harmonyos
塞尔维亚大汉13 小时前
【OpenHarmony】 鸿蒙 UI开发之CircleIndicator
harmonyos·arkui
BisonLiu13 小时前
华为仓颉鸿蒙HarmonyOS NEXT仓颉原生数据网络HTTP请求(ohos.net.http)
harmonyos