【HarmonyOS 5】鸿蒙应用px,vp,fp概念详解

article/2025/9/4 9:34:38

【HarmonyOS 5】鸿蒙应用px,vp,fp概念详解

一、前言

目前的鸿蒙开发者,大多数是从前端或者传统移动端开发方向,转到鸿蒙应用开发方向。

前端开发同学对于开发范式很熟悉,但是对于工作流程和开发方式是会有不适感,其实移动应用开发与前端开发,最大的区别就在于UI适配和性能优化上了。

今天我们就来分析下鸿蒙中UI适配的规范与小窍门。

二、 鸿蒙中vp、px、fp 是什么?

刚接触鸿蒙的同学,对于px像素肯定是很熟悉,但是对vp和fp都是一脸懵逼,不知道干嘛用的,可能只是被代码规范要求或者老人技术指导强调:

“fp用于字体大小,vp用于UI数值,千万不要在UI里用像素px设置控件。”

但是原理却不是很清楚。
在这里插入图片描述
今天就给大家详细来分析一下其中的缘由。

1. vp

其实vp的概念很简单,vp是屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素,具有一定的逻辑比例数值。

因为vp在多种设备上不会变形,有一致的视觉体量。当前鸿蒙API接口数值不带单位时,默认单位都为vp,可见这是官方推荐的数值单位。

2. fp

而fp的概念与vp类似,在鸿蒙系统中也是适用屏幕密度变化,随系统字体大小设置变化。是专门用于字体像素的单位。

3. px

像素px是我们移动开发的老熟人了。从产品给的原型图,到UI设计给的效果图设计图,单位基本都是px,有时候我们会转成dp进行比例使用。而在鸿蒙开发中,为了适配多种设备,不同的屏幕像素密度,也有类似于dp的概念,就是综上所述的vp与fp。

因为在鸿蒙应用开发中,与安卓的现状相同,需要适配多种机型,不同的折叠手机。并且鸿蒙特性之一就是自由流程多端适配。一套代码,需要适配多种类设备显示。所以官方不建议使用屏幕像素单位px进行UI数值的设置。道理也很简单了,讲了很多遍,因为设备的屏幕像素密度不同,如果使用px会导致界面UI布局变形。

综上所述,在鸿蒙应用开发中,组件数值使用vp,字体大小使用fp。

如何将px转化为vp或者fp?

首先为什么需要转化呢?因为设计端源头,给的是像素单位,目前的设计软件还给不了vp和fp。所以我们只能将设计图上的像素进行数值转化。官方很贴心提供了十分方便的转化函数:px2vp px2fp
在这里插入图片描述
不过最新的api进行了更新,大家需要格外注意。直接使用vp2px/px2vp/fp2px/px2fp/lpx2px/px2lpx可能存在UI上下文不明确的问题,建议使用getUIContext()获取UIContext实例,再使用UIContext下的px2vp,px2fp等等绑定实例的接口。

代码示例,例如:

// 建议使用: this.getUIContext().px2vp()
.width(px2vp(200))

三、UI开发规范的参考

  1. UI设计人员根据效果图切图之前,开发人员需要提前沟通好,确认以下信息:切图样式,图标是否镂空,图标是否有白边,图标宽高尺寸等。

  2. 设计人员切图提供后,开发人员需要明确切图是否OK,进行切图资源的review,方式后续返工,明确符合开发需要。

  3. 控件尺寸: 开发人员将px尺寸,使用px2vp(value : number) : number,将px单位的数值转换为以vp为单位的数值。

  4. 字体大小: 开发人员将px尺寸,使用px2fp(value : number) : number,将px单位的数值转换为以fp为单位的数值。

  5. Color 颜色: 尽量使用既有枚举格式:Color.Black,Color.White等。若没有,需要UI人员提供标注的16进制颜色。例如:‘#FFFFFF’。

  6. UI自测: 应用开发人员自测比对与效果图的尺寸,验证完成后进行UI联调。

  7. UI联调: 开发人员将APP UI提测。设计通过流水线,获取功能界面截图,将截图发给UI,UI联调比对效果是否有问题。静态图通过联调后,UI会看动态多设备交互效果,验证是否有问题。


http://www.hkcw.cn/article/kTIhIXtTne.shtml

相关文章

[Rust_1] 环境配置 | vs golang | 程序运行 | 包管理

目录 Rust 环境安装 GoLang和Rust 关于Go 关于Rust Rust vs. Go,优缺点 GoLang的优点 GoLang的缺点 Rust的优点 Rust的缺点 数据告诉我们什么? Rust和Go的主要区别 (1) 性能 (2) 并发性 (3) 内存安全性 (4) 开发速度 (5) 开发者体验 Ru…

Codeforces Round 1024 (Div. 2)

Problem - A - Codeforces 思维题&#xff1a; 如果n不能整除p&#xff0c;就会多出一部分&#xff0c;这个部分可以作为调和者&#xff0c;使整个数组符合要求。 如果n能整除p&#xff0c;没有调和空间&#xff0c;只有看n/p*qm 来看代码&#xff1a; #include <bits/s…

【东枫科技】KrakenSDR 天线阵列设置

标准测向需要五根相同的全向天线。您可以折衷使用更少的天线&#xff0c;但为了获得最佳性能&#xff0c;我们建议使用全部五根天线。这些天线通常是磁铁安装的鞭状天线&#xff0c;或偶极子天线。我们建议始终使用均匀圆形阵列 (UCA) 天线&#xff0c;因为它可以确定来自各个方…

包含Javascript的HTML静态页面调取本机摄像头

在实际业务开发中&#xff0c;需要在带有摄像头的工作机上拍摄施工现场工作过程的图片&#xff0c;然后上传到服务器备存。 这便需要编写可以运行在浏览器上的代码&#xff0c;并在代码中实现Javascript调取摄像头、截取帧保存为图片的功能。 为了使用户更快掌握JS调取摄像头…

2023年6月第三套第二篇

找和脑子有关系的rather than 不是的意思&#xff0c;不用看 instead表示递进的解释 even when即使不重要&#xff0c;看前方主句 d选项是even when和前方主句的杂糅&#xff0c;往往是错的 instead of 而不是 这道题&#xff0c;有的人觉得避免模仿这时候你会笑&#xff0c;所…

Redis的大Key问题如何解决?

大家好&#xff0c;我是锋哥。今天分享关于【Redis的大Key问题如何解决&#xff1f;】面试题。希望对大家有帮助&#xff1b; Redis的大Key问题如何解决&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis中的“大Key”问题是指某个键的值占用了过多…

magic-api配置Git插件教程

一、配置gitee.com 1&#xff0c;生成rsa密钥&#xff0c;在你的电脑右键使用管理员身份运行&#xff08;命令提示符&#xff09;&#xff0c;执行下面命令 ssh-keygen -t rsa -b 2048 -m PEM一直按回车键&#xff0c;不需要输入内容 找到 你电脑中的~/.ssh/id_rsa.pub 文件…

Virtuoso中对GDS文件进行工艺库转换的方法

如果要对相同工艺节点下进行性能评估&#xff0c;可以尝试将一个厂商的GDS文件转换到另一个厂商&#xff0c;不过要注意的是不同厂商&#xff08;比如SMIC和TSMC&#xff09;之间的DRC规则&#xff0c;尽量采用两个DRC中的约束较为紧张的厂商进行设计&#xff0c;以免转换到另外…

【二】9.关于设备树简介

1.什么是设备树&#xff1a; &#xff08;DTS&#xff09;采用树形结构描述扳级设备&#xff0c;也就是开发板上的设备信息&#xff0c;每个设备都是一个节点。 一个SOC可以做出很多不同的板子&#xff0c;这些不同的板子肯定是有共同的信息&#xff0c;将这些共同的信息提取出…

VSCode远程开发-本地SSH隧道保存即时修改

工作环境是一个网站团队几人同时在改&#xff0c;为了减少冲突&#xff0c;我们选择在自己公司服务器上先部署一版线上通用&#xff0c;再连接到不同的本地&#xff0c;这样我们团队可以在线上即时看到他人修改的结果&#xff0c;不用频繁拉取提交推送代码 在线上服务器建一个…

Embedded IDE下载及调试

安装cortex_debug插件 我这边用jlink烧录&#xff0c;其他的根据你自己的来 jlink路径在左下角齿轮设置里 设置位置&#xff1a; 芯片名称配置的都是自动生成的&#xff0c;在eide.json的这里改为你jflash芯片包的设置 调试里也会自动生成一个cortex_debug的调试选项 点旁边的…

lua注意事项

感觉是lua的一大坑啊&#xff0c;它还不如函数内部就局部变量呢 注意函数等内部&#xff0c;全部给加上local得了

【第4章 图像与视频】4.4 离屏 canvas

文章目录 前言为什么要使用 offscreenCanvas为什么要使用 OffscreenCanvas如何使用 OffscreenCanvas第一种使用方式第二种使用方式 计算时长超过多长时间适合用Web Worker 前言 在 Canvas 开发中&#xff0c;我们经常需要处理复杂的图形和动画&#xff0c;这些操作可能会影响页…

长安链起链调用合约时docker ps没有容器的原因

在调用这个命令的时候&#xff0c;发现并没有出现官方预期的合约容器&#xff0c;这是因为我们在起链的时候没有选择用docker的虚拟环境&#xff0c;实际上这不影响后续的调用&#xff0c;如果想要达到官方的效果那么你只需要在起链的时候输入yes即可&#xff0c;如图三所示

表中如何插入数据!扩展技能边界

insert语句向表中添加行。认识命令就行&#xff0c;使用时可以问AI帮忙写。 一.按顺序插入行 向上次新建的天气表&#xff0c;插入行。 insert into weather values (1,北京, 1, 37, 0.55, 2025-05-12); --按顺序依次写 insert into weather values (2,上海, 10, 41, …

三轴云台之抗扰动技术篇

三轴云台的抗扰动技术是保障其在复杂动态环境下实现稳定拍摄的核心&#xff0c;其技术体系涵盖机械结构优化、传感器融合算法、控制策略设计及动态补偿机制等多个层面。 一、抗扰动技术核心原理 多轴解耦与独立控制 俯仰轴&#xff08;Pitch&#xff09;、横滚轴&#xff08…

财管4-债务资本成本普通股资本成本的估计

1.债务资本成本 1) 未来成本 2) 期望成本 3) 长期债务成本 2.税前债务资本成本估计 2.1 各种方法 适用方法适用条件到期收益率公司目前有上市发行的长期债券可比公司 虽然没有上市债券&#xff0c;但可以找到一个拥有可交易债券的可比公司作为参照物&#xff1b;使…

【25-cv-05935】Keith律所代理(绿色巴士图)版权维权案

绿色巴士版权图 案件号&#xff1a;25-cv-05935 立案时间&#xff1a;2025年5月28日 原告&#xff1a;Alena Pavluchenko d/b/a Ellen Paul Art 代理律所&#xff1a;Keith 原告介绍 原告是科德角海滨的一名艺术家&#xff0c;擅长以水彩、书法和浮木雕刻记录生活。她通过…

登山第二十三梯:有序点云平面快速分割——35Hz帧速前进

文章目录 一 摘要 二 资源 三 内容 一 摘要 3D 点云中的实时平面提取对于许多机器人应用至关重要。作者提出了一种新颖的算法&#xff0c;用于在从 Kinect 传感器等设备获得的有组织的点云中实时可靠地检测多个平面。通过在图像空间中将这样的点云均匀地划分为不重叠的点组&…

【聚焦国产8K全画幅摄像机应用】多图预警!

聚焦国产8K全画幅摄像机应用实战图&#xff1a; 博冠8K全画幅摄像机B1应用于2023中央广播电视总台春晚拍摄现场 博冠8K全画幅摄像机B1应用于2023中央广播电视总台春晚拍摄现场 ​​​​ 博冠8K全画幅摄像机B1拍摄2022北京冬奥会 博冠8K全画幅摄像机B1在某电视台节目制作现场进行…