HarmonyOS 6 ArkUI 像素单位使用文档
文章目录
- HarmonyOS 6 ArkUI 像素单位使用文档
- 单位基础说明
- 1. 核心单位释义
- 2. 数值写法规则
- 示例代码
- 代码逐段解析
- 1. 纯数字尺寸 `width(220)`
- 2. 物理像素 `width('220px')`
- 3. 字符串格式 vp `width('220vp')`
- 4. 逻辑像素 `width('220lpx')`
- 5. vp 转 px:`vp2px(value)`
- 6. 字体单位 `fontSize('12fp')`
- 7. px 转 vp:`px2vp(value)`
- 运行效果
- 总结
HarmonyOS 6 ArkUI 像素单位使用文档
单位基础说明
1. 核心单位释义
| 单位 | 全称 | 用途 & 特性 |
|---|---|---|
| vp | Virtual Pixel(虚拟像素) | 布局首选单位,屏幕密度自适应,不同设备视觉尺寸一致,推荐用于宽高、边距、布局尺寸 |
| px | 物理像素 | 设备真实像素点,不做适配,不同密度设备显示大小不一致,多用于原生能力对接、图片精准尺寸 |
| lpx | 逻辑像素 | 基于设计稿宽度做等比缩放,多端UI统一设计稿时优先使用,需配合全局designWidth配置 |
| fp | Font Pixel(字体像素) | 文字专用单位,跟随系统字体大小设置变化,仅用于文本字号 |
2. 数值写法规则
- 纯数字:默认等价
vp,例:width(220)=width('220vp') - 字符串带单位:明确指定单位,例:
width('220px')、width('220lpx') - 动态计算值:支持表达式拼接、单位转换API返回值
示例代码
@Entry @Component struct Example { build() { Column() { Flex({ wrap: FlexWrap.Wrap }) { // 1. 纯数字写法,默认单位 vp Column() { Text("width(220)") .width(220) .height(40) .backgroundColor(0xF9CF93) .textAlign(TextAlign.Center) .fontColor(Color.White) .fontSize('12vp') }.margin(5) // 2. 显式指定 px 单位 Column() { Text("width('220px')") .width('220px') .height(40) .backgroundColor(0xF9CF93) .textAlign(TextAlign.Center) .fontColor(Color.White) }.margin(5) // 3. 显式指定 vp 单位(字符串格式) Column() { Text("width('220vp')") .width('220vp') .height(40) .backgroundColor(0xF9CF93) .textAlign(TextAlign.Center) .fontColor(Color.White) .fontSize('12vp') }.margin(5) // 4. lpx 逻辑像素,依赖全局 designWidth Column() { Text("width('220lpx') designWidth:720") .width('220lpx') .height(40) .backgroundColor(0xF9CF93) .textAlign(TextAlign.Center) .fontColor(Color.White) .fontSize('12vp') }.margin(5) // 5. vp 转 px:vp2px() 单位转换 Column() { Text("width(vp2px(220) + 'px')") .width(this.getUIContext().vp2px(220) + 'px') .height(40) .backgroundColor(0xF9CF93) .textAlign(TextAlign.Center) .fontColor(Color.White) .fontSize('12vp') }.margin(5) // 6. fp 字体专用单位 Column() { Text("fontSize('12fp')") .width(220) .height(40) .backgroundColor(0xF9CF93) .textAlign(TextAlign.Center) .fontColor(Color.White) .fontSize('12fp') }.margin(5) // 7. px 转 vp:px2vp() 单位转换 Column() { Text("width(px2vp(220))") .width(this.getUIContext().px2vp(220)) .height(40) .backgroundColor(0xF9CF93) .textAlign(TextAlign.Center) .fontColor(Color.White) .fontSize('12fp') }.margin(5) }.width('100%') } } }运行效果如图:
代码逐段解析
1. 纯数字尺寸width(220)
- 写法:直接传入数字,默认单位为 vp
- 等价写法:
width('220vp') - 适用:常规布局宽高、间距,鸿蒙标准推荐写法。
2. 物理像素width('220px')
- 显式声明
px单位,代表设备真实物理像素 - 特点:不同分辨率设备展示尺寸差异大,不推荐常规布局使用,仅用于对接原生接口、图片固定像素尺寸场景。
3. 字符串格式 vpwidth('220vp')
- 显式字符串声明 vp,语义更清晰,和纯数字写法效果完全一致
- 团队规范要求统一单位写法时可优先使用。
4. 逻辑像素width('220lpx')
lpx基于全局配置的designWidth(设计稿宽度)做等比缩放- 示例标注
designWidth:720,表示以 720px 作为基准设计稿,多设备自动等比适配 - 适用:整套UI基于统一设计稿出图的跨设备项目。
5. vp 转 px:vp2px(value)
- API:
this.getUIContext().vp2px(220) - 作用:将虚拟像素 vp 换算为当前设备物理像素 px,返回数值可拼接
px字符串使用 - 场景:需要向原生组件/系统接口传递物理像素尺寸时使用。
6. 字体单位fontSize('12fp')
fp专门用于文字字号,会跟随系统「字体大小」设置动态变化- 规范:文本字号禁止使用 vp/px,统一使用 fp。
7. px 转 vp:px2vp(value)
- API:
this.getUIContext().px2vp(220) - 作用:将物理像素 px 反向换算为虚拟像素 vp,直接作为尺寸参数传入
- 场景:已有图片/素材标注为 px,需要转为布局适配单位时使用。
运行效果
- 页面使用流式弹性布局
Flex(FlexWrap.Wrap),所有示例卡片自动换行展示; - 纯数字
220与'220vp'视觉宽度完全相同; 220px在高分屏设备上会显示更小/更大,无自适应能力;220lpx根据全局设计稿宽度自动缩放,多设备视觉统一;- 转换API计算出的尺寸与直接书写对应单位效果一致;
fp字体可在系统设置调整字体大小后,实时看到文字缩放变化。
总结
- 布局尺寸(宽/高/边距/圆角):优先使用vp(纯数字 或
xxvp) - 文本字号:强制使用fp
- 统一设计稿跨端:使用lpx,并在项目入口配置
designWidth - 对接原生/底层接口:使用px,配合
vp2px/px2vp做转换
如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是持续创作的动力
