HarmonyOS 鸿蒙Next UI设计师设计稿px单位转鸿蒙vp/fp单位转换公共类

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

HarmonyOS 鸿蒙Next UI设计师设计稿px单位转鸿蒙vp/fp单位转换公共类

px/vp/fp三者的区别,请查看我之前的帖子:

https://developer.huawei.com/consumer/cn/forum/topic/0203149707348916165?fid=0101587866109860105

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

鸿蒙开发工程师实现页面时,不能直接使用px的数值,大小位置单位应该使用vp,字体大小单位应该使用fp。否则在手机外的其他鸿蒙设备上,页面显示或排版偏差就比较大。

20 回复

找HarmonyOS工作还需要会Flutter技术的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

请问设计稿宽度360是px吗?

是的,ui设计师只出一套设计稿,单位是px

你好,代码中的GlobalContext内容是啥呀?

/**

  • 全局上下文 */ export class GlobalContext { private constructor() { }

private static instance: GlobalContext; private objects = new Map<string, Object>();

/**

  • 获取全局上下文 */ public static getContext(): GlobalContext { if (!GlobalContext.instance) { GlobalContext.instance = new GlobalContext(); } return GlobalContext.instance; }

/**

  • 获取对象 */ getObject(name: string): Object | undefined { return this.objects.get(name); }

/**

  • 设置对象 */ setObject(key: string, objectClass: Object): void { this.objects.set(key, objectClass); } }
如果只是手机上运行的话,可以使用lpx
大佬您好,请问SizeUtil.getVp($r)是在那里使用。是这么用吗 .width(SizeUtil.getVp($r))

大佬您好,.width(SizeUtil.getVp($r)),这个$r要怎么写?比如就像您图示118px

SizeUtil.getVp($r(‘app.float. button_height’)) 这个是资源文件resources/base/element/float.json中配置的name { “name”: “button_height”, “value”: “200” }

可以使用lpx单位,以这个设计图为例,宽度750px

cke_1222.png

那么需要在src/main/resources/base/profile/main_pages.json,配置"designWidth": 750

{
  "src": [
    "pages/Index",
    "pages/Page01",
    "pages/Page02",
    "pages/Page03",
    "pages/Page04",
    "pages/Page05"
  ],
  "window": {
    "designWidth": 750
  }
}<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

最后在代码里,以图上的退出登录的字体为例,px直接改成lpx即可

cke_10351.png

Text('退出登录').fontSize('30lpx')<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

注意事项:预览器 和 本地模拟器 对于修改750不生效,只有真机有效果。 参考:https://developer.huawei.com/consumer/cn/forum/topic/0203136318182232445?fid=0101562279236410779

使用lpx在折叠屏展开状态下显示变大,样式变得很奇怪

cke_259.png

大佬,按照您的代码跑不起来

你是不是忘记在类前面定义常量: const DESIGN_WIDTH = 360; // 设计稿宽度 const DESIGN_HEIGHT = 780; // 设计稿高度

我记得ArkUI默认就是vp单位呢, 但是看见你用第三方UI设计转换之后就是px单位, 这点确实尴尬.

之前我也弄过,在第三方UI设计之后没有一次开发多端部署了哦, 最关键的是布局有大问题,弄来弄去直接用回ArkUI代码布局了,白白折腾我一周时间.

不知道现在有没有修复布局问题

用了楼主的方式,其实实现方式和lpx效果一样了,但是这两种方式在折叠屏上展开态会造成页面显示过大,你们是咋处理的呢

在HarmonyOS中,UI设计师使用的px单位需要转换为鸿蒙系统支持的vp(Visual Pixel,视觉像素)或fp(Font Pixel,字体像素)单位,以实现跨设备的UI适配。转换通常依赖于设备的屏幕密度(dpi)和字体大小。没有直接的公共类可以直接进行转换,但你可以根据设备的dpi动态计算转换率。

例如,vp到px的大致转换公式是:px = vp * dpi / 160(假设基准dpi为160)。对于fp,通常与文字大小相关,转换方法可能更依赖于具体实现。

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

回到顶部