【HM】UI设计师给的设计稿,标注单位是px,但鸿蒙开发者在布局页面时,元素大小位置的单位是vp,字体定位是fp。封装了一个单位转换公共类

鸿蒙: 像素单位(px,vp,fp,lpx) vp与px的比例与屏幕像素密度有关.也就是说1个物理像素里面包含的像素就是vp,可以称为真实像素,1px像素包含的真实像素越多,越清晰,这也是为什么有的相机像素明明不高却很清晰的原因.当designWidth为720时,在实际宽度为1440物理像素的屏幕上,1lpx为2px大小。屏幕物理像素单位.比如:电脑分辨率1920*1080, 宽就为1920px.高就为1080px.屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素,当数值不带单位时,默认单位vp。官方还提供了一堆方法,可以在单位之间进行转换. 阅读详情

UI设计师给的设计稿如下:

鸿蒙开发工程师实现页面时,不能直接使用px的数值,大小位置单位应该使用vp,字体大小单位应该使用fp。否则在手机外的其他鸿蒙设备上,页面显示或排版偏差就比较大。 为了解决不同单位转换,我写了一个公共类,代码如下:

import display from '@ohos.display';
import { GlobalContext } from './GlobalContext';

let context = getContext(this);
const DESIGN_WIDTH = 360; // 设计稿宽度
const DESIGN_HEIGHT = 780; // 设计稿高度

/**
 * 尺寸适配工具类
 */
export default class SizeUtil {
  /**
   * 尺寸适配
   * @param value 设计稿尺寸
   */
  static adaptSize(value: number): number {
    let deviceDisplay = GlobalContext.getContext().getObject("globalDisplay") as display.Display;
    let widthScale = deviceDisplay.width / DESIGN_WIDTH;
    let virtualHeight = DESIGN_HEIGHT * widthScale;
    let designDim = Math.sqrt(DESIGN_WIDTH * DESIGN_WIDTH + DESIGN_HEIGHT * DESIGN_HEIGHT);
    let virtualDim = Math.sqrt(deviceDisplay.width * deviceDisplay.width + virtualHeight * virtualHeight);
    return virtualDim * value / designDim; // 放缩后长度
  }

  /**
   * 获取px
   * @param value 设计稿尺寸
   */
  static getPx(value: Resource): number {
    console.log("context:", context);
    let beforeVp = context.resourceManager.getNumber(value.id);
    return SizeUtil.adaptSize(beforeVp);
  }

  /**
   * 获取vp
   * @param value 设计稿尺寸
   */
  static getVp(value: Resource): number {
    let beforeVp = context.resourceManager.getNumber(value.id);
    return px2vp(SizeUtil.adaptSize(beforeVp));
  }

  /**
   * 获取fp
   * @param value 设计稿尺寸
   */
  static getFp(value: Resource): number {
    let beforeFp = context.resourceManager.getNumber(value.id);
    return px2fp(SizeUtil.adaptSize(beforeFp));
  }
}
 

使用时,直接调用函数即可:SizeUtil.getVp($r)

鸿蒙开发-像素单位 当designWidth为720时,在实际宽度为1440物理像素的屏幕上,1lpx为2px大小。屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素,当数值不带单位时,默认单位vp。在实际宽度为1440物理像素的屏幕上,1vp约等于3px。ArkUI为开发者提供4种像素单位,鸿蒙ArkUI 框架采用vp为基准数据单位。字体像素,与vp类似适用屏幕密度变化,随系统字体大小设置变化。使用虚拟像素vp,使元素在不同密度的设备上具有一致的视觉体量。视窗逻辑像素单位,lpx单位为实际屏幕宽度与逻辑宽度(通过。 阅读详情

相关推荐

鸿蒙OS开发问题:【尺寸适配算法】

如何在HarmonyOS 系统上出设计稿?问题1: 为什么要计算虚拟高度,即 virtualHeight问题2: 输出值为什么采用这个公式。

m0_62167422的博客 3050

鸿蒙移动端像素问题?设计图和vp的比例?

大家都知道原始的css3适配方案是媒体查询和rem布局,媒体查询是现有多种ui框架的底层原理,写非ui框架项目时候,rem更好用一些。由此可见,不管设计图是720px,还是1080px 项目中内容宽度写360vp 都会占满全屏。鸿蒙移动端最主要的问题是怎样适配所有大小不同的移动设备端口?但是rem需要有一个设计图比例问题,鸿蒙到底应该是多少?

weixin_39971163的博客 1550

[HarmonyOS][鸿蒙]fp、vp、px相互转换

官方提供了工具类AttrHelper,可实现fp、vp、px相互转换: https://developer.harmonyos.com/cn/docs/documentation/doc-references/attrhelper-0000001054518726 static int fp2px​(floatvalue, floatdensity) Converts a font-size pixel (fp) to a pixel value based on the scr..

Macross的专栏 2903

鸿蒙系统中的像素单位与API使用详解

px:屏幕物理像素单位,与设备硬件直接相关。vp(Viewport 像素):屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素。fp(字体像素):类似于vp,适用于屏幕密度变化,并会随系统字体大小设置变化。lpx(视窗逻辑像素单位):其大小取决于实际屏幕宽度与逻辑宽度(通过designWidth配置)的比值。

qq_14863717的博客 2337

HarmonyOS像素转换-如何使用像素单位设置组件的尺寸。

本篇Codelab介绍像素单位的基本知识与像素单位转换API的使用。通过像素转换案例,向开发者讲解了如何使用像素单位设置组件的尺寸、字体的大小以及不同像素单位之间的转换方法。主要功能包括:

2401_82546228的博客 1505

鸿蒙开发实战:鸿蒙应用开发中的页面管理工具类详解

通过掌握这一工具类的核心属性和方法,开发者能够轻松应对各种页面管理挑战,为用户带来更加优质、个性化的界面体验。在鸿蒙应用开发的征程中,如何高效地管理页面布局与显示,以满足用户对于沉浸式体验、个性化StatusBar颜色等界面特性的需求,一直是开发者们关注的焦点。为此,我特别设计了一款实用的“页面管理工具类”,它具备强大的功能,能帮助开发者轻松应对各种页面管理挑战。在初始化过程中,工具类会自动获取主窗口对象、设置全屏开发状态,并计算顶部和底部安全区域的高度,为后续的页面布局与管理提供基础数据。

s297165331的专栏 1343

鸿蒙应用开发-组件样式

ArkTS以声明方式组合和扩展组件来描述应用程序的UI 同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑

m0_56255097的博客 1698

HarmonyOs学习笔记-布局单位

鸿蒙开发中布局存在很多单位鸿蒙的默认单位是vp下方先展示一下在RrkTsUI中我们应该怎么书写,然后讲一下各大单位具体的含义。

童年纸飞机的博客 1296

鸿蒙入门04-像素单位

名称描述px屏幕物理像素单位。vp屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素fp字体像素,与 vp 类似适用屏幕密度变化,。lpx视窗逻辑像素单位,lpx单位为实际屏幕宽度与逻辑宽度(通过配置)的比值,designWidth 默认值为 720。当 designWidth 为 720 时,在实际宽度为1440 物理像素的屏幕上,1lpx 为 2px 大小。

qq_42660453的博客 2497

鸿蒙第16篇——数据持久化

本文介绍的数据持久化是指鸿蒙应用的数据持久化存储。它是将内存中的数据通过文件或数据库的形式保存到设备存储中。鸿蒙支持多种数据存储方式, 包括用户首选项Preferences、 键值型数据库KV-Store和关系型数据库。

daozhongyang的专栏 153

ubuntu 20.04系统离线安装nfs

ubuntu环境下,离线安装nfs

m0_62464865的博客 2241

初窥鸿蒙

一、什么是鸿蒙 鸿蒙即 HarmonyOS ,是华为公司推出的支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备的分布式操作系统,并且它提供了多语言开发的 API,支持 Java、XML、C/C++、JS、CSS、HML(类 html 的鸿蒙自己的标记语言)等开发语言,而且它提供多种响应式布局方案,支持栅格化布局,可以使用同一套代码部署在手机手表平板等多种不同尺寸屏幕的设备上。 二、开发准备 2.1 环境安装 开发鸿蒙软件需要用到 HUAWEI DevEco Studio,它提供了模板创建、开发、编译、

凹凸实验室 947

松灵机器人——ROS下的CAN通讯调试(内含所需调用包,都是操作步骤)

松灵机器人——ROS下的CAN通讯调试(都是操作步骤) 1 代码包地址 scout_ros package:https://github.com/westonrobot/scout_ros.git ugv_sdk-main package:https://github.com/westonrobot/ugv_sdk webots package:https://cyberbotics.com/ 2 硬件准备 2.1 SCOUT MINI 小白车 + 尾部航空插头 + CAN_TO_USB适配器

weixin_48924581的博客 1万+

一文秒懂鸿蒙 HarmonyOS像素单位 使用

鸿蒙操作系统中提供了多种单位用于 UI 元素的大小和布局控制,这些单位的选择直接影响应用在不同设备上的适配效果。px(像素):适用于对精确像素控制有需求的场景,如小型控件或图标中的文本。vp(视口单位):适合需要跨设备适配的场景,能够根据设备的屏幕密度自动调整。fp(字体像素):推荐用于定义字体大小,确保在不同设备上字体的一致性和可读性。lpx(逻辑像素):用于布局设计,适配不同屏幕分辨率,保证在各种设备上的一致显示。百分比100%:用于相对布局场景,特别是在响应式设计中用于控制元素的宽高。在。

肤浅失眠中 3448

(3万字深度解析)Kaggle《房价预测:高级回归技巧》详解复现攻略

在这篇教程式文章中,我们从零开始完成了 Kaggle《房价预测:高级回归技巧》比赛的复现工作,涵盖了数据预处理、特征工程、模型训练、调优、解释和融合的完整流程。深入理解数据:阅读数据描述,结合常识对每个特征作出合理处理(如缺失值填充’None’表示无此设施 、异常值剔除 等)。对目标和偏态特征进行对数变换,使分布更平滑,从而更好满足模型假设并提升准确度。特征工程:我们创造了总面积、总浴室等新特征,整合信息提高模型可学习性。

qq_38334677的博客 1770

VS Code配置Java开发环境避坑指南:从JDK到Spring Boot插件全流程

本文详细介绍了在VS Code中配置Java开发环境的完整流程,涵盖JDK选择、环境变量配置、核心插件安装、构建工具优化及Spring Boot项目专项设置。特别针对常见问题提供避坑方案,帮助开发者快速搭建高效稳定的开发环境,提升Java和Spring Boot开发效率。

weixin_28839699的博客 979

不同像素密度,不同尺寸设备如何适配?

不同像素密度,不同尺寸设备(比如平板)如何适配?

qq_36255346的博客 704

CREO图文教程:三维设计案例之矿泉水瓶实例图文教程之详细攻略

草绘,先绘制中心线,绘制底部宽度;对称标注:点击左端点,中心线,左端点,中键即可标注;给定高度;样条曲线绘制外形(双击样条曲线,点击下栏的控制模式(第一个按钮),再拉动控制样条曲线上的各个点)打勾即可得到三维实体。......

走向CTO之路 1932

鸿蒙开发处理设备适配

总的来说,处理电视屏幕的适配需要考虑布局和UI设计的优化、特定的交互方式和多媒体播放的特点,通过合适的设计和开发方法,提供适合电视屏幕的应用和功能。鸿蒙开发框架通过多种适配机制来处理不同设备和屏幕尺寸的适配问题,使开发者可以更方便地开发适配多种设备的应用程序。

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 1506

【OpenClaw企业级智能体实战】第32篇:政企版OpenClaw安全落地指南——奇安信55页报告深度拆解与实战

2026年Q2,OpenClaw(俗称“龙虾”)安全风险集中爆发,公安部、工信部等监管机构密集发声,23万公网暴露实例、155个高危漏洞让企业“养虾”安全压力骤增。奇安信发布的55页《政企版龙虾安全使用指南》,以“看得清、管得住、用得好”为核心,构建了“端-网-云”三层防护体系。本文深度拆解这份报告的九大安全面与三大趋势,全景扫描奇安信、腾讯、360等头部厂商安全方案,提炼企业最低安全基线与实操配置,通过金融机构虚拟案例演示落地全流程,提供从资产摸底、规范制定到工具部署的完整解决方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 572

2025华为OD面试手撕代码真题目录、八股文真题目录以及面试技巧

1. **华为OD面试技术面准备指南** 2. **华为OD面试技术面常见问题解答** 3. **华为OD面试技术面经验分享** 4. **华为OD面试技术面注意事项** 5. **华为OD面试技术面攻略** 6. **华为OD面试技术面模拟题目与解析** 7. **华为OD面试技术面知识点梳理** 8. **华为OD面试技术面常考**

算法大师! 3万+

鸿蒙开发(19)布局单位

在我们布局中,经常会采用px作为布局的一个尺寸参考单位,这个单位在浏览器里面已经是布局的标准。在鸿蒙开发中,提出了一些新的单位用于布局。物理像素:一般用px来表示逻辑像素:在布局的时候,底层针对物理像素和屏幕的尺寸关系进行了转化的中间层。分辨率:代表在屏幕上面到底布局了多少个像素点(发光点)鸿蒙开发中,要进行布局,我们需要采用官方提供的单位来实现。

weixin_45299895的博客 765

华为MetaERP PTP采购到应付全流程解析

摘要:本文系统解析华为MetaERP中的PTP(采购到应付)全流程管理方案,涵盖从采购申请到付款执行的完整业务流程。文章详细分解了PR、PO、GR、IV、AP等关键环节的财务核算规则,并提供了预算校验、库存更新等Python代码示例。同时阐述了IT落地架构设计,包括会计引擎配置、系统集成方案及银企直连支付接口实现。该方案通过三单匹配自动化和智能会计引擎,将处理效率提升10倍(200笔/人天→2000笔/人天),实现98%的自动化率,为集团企业提供了高效的数字化财务管理样板。文中所有技术方案均需根据实际场景调

金牌架构师 1743

HM-ArkUI设计时,px/vp/fp 三者单位的区别

字体像素主要用于字体大小的计算。PX(Pixel):屏幕像素,是实际像素单位,用于表示屏幕上的像素点。1px代表手机屏幕上的一个像素点,常见的手机比如1080×1920 这个数值的单位都是px,由于px在不同手机上的大小不同,差别较大,适配性太差,不建议使用。它提供了一种灵活的方式来适应不同屏幕密度的显示效果,使元素在不同密度的设备上具有一致的视觉体量。在鸿蒙开发中,鸿蒙应用是支持一开多端,适配多设备端显示,不建议使用屏幕像素单位进行宽度和高度的计算,因为不同设备的屏幕像素密度不同,导致适配性较差。

与辉鸿蒙 1340

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

HarmonyOS 7 端侧 AI 图像超分的工程化落地

用户抱怨网络差的时候图片传不上去,更严重的是,大量的私密照片上传到云端,引发了严重的隐私合规审查危机。痛定思痛后,我们决定把 AI 模型直接塞进手机里,用端侧的 NPU 来做推理,但这绝非易事。我们首先在服务端对模型进行了知识蒸馏,把参数砍掉了一大半,然后利用 MindSpore Lite 的转换工具,将模型转成了鸿蒙底层支持的。即便如此,模型依然有 20 多兆,我们最终选择了 FP16 量化,牺牲了极其微小的画质,换取了内存占用减半。推理过程极其消耗 CPU 和内存,稍微大一点的图,处理时间长达几秒。

2602_97267507的博客 160

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

〖物流终端实战 05〗纯血鸿蒙 ArkTS 高阶性能优化:长列表渲染、组件复用与内存泄漏排查

本文深度剖析鸿蒙ArkTS高阶性能优化,直击长列表卡顿与内存泄漏痛点。针对渲染,指出ForEach全量构建的缺陷,强调采用LazyForEach(V2推荐Repeat)配合增量通知及稳定业务Key;针对组件复用,明确@Reusable仅复用实例不重置状态,必须在aboutToReuse中手动清理UI状态;针对内存泄漏,总结全局监听未注销、定时器未清理及长生命周期对象持有页面引用三大元凶,并指导通过DevEco Profiler的Heap快照排查引用链。文章强调优化需遵循“先定位后改代码”原则,助力开发者打造

Eyf • 半字节的博客 676
上一篇: 【组件】自定义页面顶部标题栏组件,可动态设置标题、左右操作按钮icon及点击事件
下一篇: 【HM】简单说明白:装饰器@State、@Prop、@Link、@Provide、@Consume修饰变量,@Watch监听变量状态发生变化
鸿花粉
博客等级 码龄20年 321粉丝 70原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿花粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值