HarmonyOs学习笔记-布局单位

devtools/2024/11/23 3:57:42/

鸿蒙开发中布局存在很多单位

鸿蒙的默认单位是vp

下方先展示一下在RrkTsUI中我们应该怎么书写,然后讲一下各大单位具体的含义。

Text("这是一个文本, 用默认单位进行展示,也就是vp")
.width(100)
.height(100);//此段代码与上方代码是一样的,上方代码默认单位就是vp
Text("这是一个文本, 用默认单位进行展示,也就是vp")
.width("100vp")
.height("100vp");Text("这是一个文本,用px单位来表示")
.width("100px")
.height("100px");

px

px代表物理像素。落实到硬件为屏幕上的一个展示单元,也就是像素点。随着时代发展,就像我们的手机,电脑,最早的时候甚至肉眼就能看出来像素点,但是随着硬件器材升级,手机越来越高端,屏幕也越来越好,也变得越来越细腻,有时候拿放大镜仔细看才能看出来像素点。因为这个像素点变得越来越小,这样相同的物理面积里就会放下更多的物理像素点,屏幕的展现就因此越来越细腻。

下图为模拟粗糙像素点与细腻像素点的区别:

当我们给一个文字或者方框的单位为px时, 假设是 10px,就意味着是10像素点, 那么在比较糙的屏幕上,也就是像素点比较大的,通常是价格比较便宜的屏幕上,10像素点累积起来的长度,要比好的屏幕,也就是像素点比较小,表现比较细腻的屏幕上, 长度要更长。原因就是,这个像素点一个比较大,一个比较小。

所以如果以px为单位,则实际长宽大小,是要根据具体的物理屏幕而定的。 不容易统一。

vp

vp是华为为Harmony系统定制的,一种默认的布局单位。是一种逻辑像素。它是为了解决我们上方介绍的px所带来的问题。就是相同px的控件, 在不同的屏幕上展示大小不统一的问题。言外之意,就是跟上述问题反着来,只要我们给定了宽高之后,那么,控件的展示,即使在不同的屏幕上,无论粗糙的屏幕还是细腻的屏幕,起码展示的肉眼可见的大小,是一样的!也就是尽量由上图形式,优化为下图形式:

那么它的解决思路是什么呢?其实跟Android系统的ps单位异曲同工。其核心的点在于,鸿蒙能拿到屏幕的真实密度,然后用公式,将单位值转换为真实的像素点值。 就是为了确保观感一致,做了计算。

公式为:

在实际宽度为1440的物理像素屏幕上, 1vp ≈ 3px 。 与Android的ps几乎一致。

fp

用来设置字体大小的单位, 实际上期原理和vp这个单位理解是一致的,但是有一个好处是,当未来手机的系统字体调大调小的时候(比如老年人比较倾向于把字体调大一些),这种情况下,我们app里面的字体也会跟着系统字体相应的调大调小。这时候,我们的字体大小单位为fp的时候,就会有这个能力。非常方便灵活。

lpx

lpx,是一种逻辑像素单位。它的意思是说, 无论用户用的手机,平板屏幕是什么样的, 像素点,大也好,小也罢。 刨去这个概念, 只把用户的屏幕,横向,纵向,分割为多少等分,例如,1020 x 1980 ,你的屏幕只要是比例跟这个尺寸相符,那么无论实际物理尺寸是大还是小,都可以按照这个量去切分。

例如一个粗糙的屏幕,本身就是横向1020 x 纵向 1980 个像素点,这样排布, 而一个比较细腻的屏幕,横向是 2040 X 纵向3960 个像素这样排布。 如果一个方框的高度设置为 100VP, 那么粗糙的屏幕宽度占据的像素点是 100个, 而后边那个比较细腻的像素点占据的是 200个, 总之是保证了物理尺寸上比例的大小展示,是一致的就可以了。

lpx与vp而言,不同的是, 观感不一样。 vp是保证控件在不同屏幕上观感大小一致。 但lpx是保证比例是一致的,也就是不同屏幕上您看到的是等比放大或缩小。


http://www.ppmy.cn/devtools/136200.html

相关文章

Day03_AJAX原理 (黑马笔记)

Day03_AJAX原理 目录 Day03_AJAX原理 学习目标 01.XMLHttpRequest - 基础使用 目标 讲解 小结 02.XMLHttpRequest - 查询参数 目标 讲解 小结 03.案例 - 地区查询 目标 讲解 小结 04.XMLHttpRequest - 数据提交 目标 讲解 小结 05.认识_Promise 目标 讲解…

java: spire.pdf.free 9.12.3 create pdf

可以用windows 系统中文字体,也可以从文件夹的字体文件 /*** encoding: utf-8* 版权所有 2024 ©涂聚文有限公司* 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎* 描述:* # Author : geovindu,Geovin Du 涂…

SSM post接口传递json 报错 HTTP状态 415 - 不支持的媒体类型

这篇文章是写给哪些在小破站学习ssm教程的兄弟们,我们都是萌新,大佬就让行吧感谢理解! 本文章主要讲解B站赵伟风SSM教程第108节(JSON数据的接收) 我所有的配置都跟老师一样,老师就很顺利发出去了,我的就是一直415&am…

如何利用谷歌浏览器提高网络安全

在当今数字化时代,网络安全已成为我们不可忽视的重要议题。作为全球最受欢迎的网络浏览器之一,谷歌浏览器不仅提供了快速、便捷的浏览体验,还内置了多种安全功能来保护用户的在线安全。本文将详细介绍如何通过谷歌浏览器提高您的网络安全&…

React - useContext和深层传递参数

#题引:我认为跟着官方文档学习不会走歪路 通常来说,你会通过 props 将信息从父组件传递到子组件。但是,如果你必须通过许多中间组件向下传递 props,或是在你应用中的许多组件需要相同的信息,传递 props 会变的十分冗长…

2411rust,cargo清理缓存

原文 Cargo最近在晚间通道上取得了一个不稳定的功能(从nightly-2023-11-17开始),它可自动清理Cargo主目录中的缓存内容. 总之,请求使用晚间通道的人启用此功能,并在Cargo问题跟踪器上报告问题.要启用它,请在你的一般在~/.cargo/config.toml或%USERPROFILE%\.cargo\config.tom…

java基础(一):JDK、JRE、JVM、类库等概念,java跨平台实现原理

目录 1、基本概念 2、程序运行过程 3、java跨平台原理 1、基本概念 JVM:虚拟机,真正运行java程序的地方 核心类库:java自己写好的程序,给程序员自己调用的,例如System.out.println(),调用的就是 核心…

uniapp奇怪bug汇总

H5端请求api文件夹接口报错 踩坑指数:5星 小程序、APP之前都是用api文件夹的接口引用调用,在h5端启动时报错,研究半天,发现把api文件夹名字改成apis就能调用,就像是关键字一样无法使用。 import authApi from /api/…