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

news2024/10/4 3:27:10

鸿蒙针对不同设备的屏幕适配和布局需求,提供了多种单位来定义 UI 元素的尺寸和位置。为了确保在不同的设备上保持一致的用户体验,鸿蒙系统支持多种单位如 pxvpfplpx 和百分比单位 100%。本文将详细讲解这些单位,并以 Text 组件的 fontSize 属性为示例,演示这些单位的实际使用。


1. 鸿蒙中的单位详解

1.1 px(像素)

px 表示像素(Pixel),是最基础的绝对单位,直接对应设备屏幕上的物理像素点。

特点:
  • 绝对单位px 是固定不变的,在所有设备上都表示相同的物理像素。
  • 缺点:在高分辨率屏幕或低 DPI 屏幕上,显示效果可能差异较大。
使用场景:
  • 适用于对元素大小有精确要求的场景,如图标、控件等。
示例:
Text('示例文字')  .fontSize('16px');  // 字体大小为 16 像素 

1.2 vp(视口单位)

vp(Viewport)是与设备屏幕分辨率相关的相对单位。鸿蒙系统会根据设备的屏幕密度(DPI)自动调整 vp 的大小,确保不同设备上元素的显示效果保持一致。

特点:
  • 相对单位vp 是根据设备分辨率自动调整的单位。
  • 自适应性:在不同设备上,vp 可以适配屏幕密度,保证一致的视觉效果。
使用场景:
  • 跨设备 UI 设计,确保在不同屏幕密度的设备上拥有相同的视觉体验。
示例:
Text('示例文字')  .fontSize('20vp');  // 字体大小为 20 视口单位 

1.3 fp(字体像素)

fp(Font Pixel)是鸿蒙系统专门用于定义字体大小的单位。它可以根据不同设备的屏幕密度进行动态调整,确保字体在所有设备上保持一致的显示效果。

特点:
  • 自适应单位fp 专门用于字体大小设置,能够在不同的屏幕密度和分辨率下自动调整字体的大小。
  • 跨设备一致性fp 可以确保字体在所有设备上都清晰可读,尤其适合文本较多的应用场景。
使用场景:
  • 适用于需要跨设备调整字体大小,确保字体在所有设备上都能保持可读性。
示例:
Text('示例文字')  .fontSize('18fp');  // 字体大小为 18 字体像素 

1.4 lpx(逻辑像素)

lpx(Logical Pixel)是逻辑像素单位,它会根据设备的屏幕分辨率和物理大小进行缩放。lpx 能够适配不同分辨率的设备,提供较好的显示效果。

特点:
  • 适配性强lpx 可以根据设备的物理屏幕特性动态调整显示效果,保证在不同设备上尺寸一致。
  • 用于布局lpx 常用于定义 UI 布局中的控件大小。
使用场景:
  • 适用于跨设备的 UI 布局设计,保证布局在不同设备上的一致性。
示例:
Text('示例文字')  .fontSize('15lpx');  // 使用逻辑像素定义字体大小 

1.5 百分比单位 100%

百分比单位表示相对于父容器的大小。虽然 fontSize 通常不直接使用百分比单位,但在布局中,百分比用于设置元素相对于父容器的尺寸。

特点:
  • 相对单位:百分比的大小根据父元素的尺寸变化而变化,适合响应式设计。
使用场景:
  • 常用于宽度、高度等布局属性中,用来实现响应式布局。
示例:
Text('示例文字')  .width('100%');  // 宽度占父容器的100% 

2. Text 组件的 fontSize 属性详解

Text 组件是鸿蒙系统中用于显示文本的基础组件,其 fontSize 属性用于设置文本的字体大小。其方法定义如下:

fontSize(value: number | string | Resource): TextAttribute; 

该方法接受三种类型的参数:numberstringResource,我们分别通过这几种类型来定义 fontSize

2.1 通过 number 类型设置字体大小

如果传递的是数字类型,默认单位为 px(像素),即字体大小直接对应于像素值。

示例:
Text('示例文字')  .fontSize(16);  // 16px,默认以像素为单位 

在此示例中,16 被解释为 16px,即字体大小为 16 像素。

2.2 通过 string 类型设置字体大小

传递字符串类型时,可以显式地指定字体大小的单位,如 pxvpfp 等。

示例:
Text('示例文字')  .fontSize('20vp');  // 使用 vp 单位设置字体大小 

此示例中,fontSize('20vp') 表示字体大小为 20vp,它会根据设备的屏幕密度进行适应性调整。

2.3 通过 Resource 类型设置字体大小

通过资源文件设置字体大小,可以在不同设备和语言环境下动态调整字体大小配置。此方法适用于多语言、多设备的项目。

示例:
Text('示例文字')  .fontSize($r('fontSizeResource'));  // 通过资源文件定义字体大小 

在这个示例中,fontSizeResource 是一个资源引用,它可以在不同设备下返回不同的字体大小配置。


3. fontSize 默认单位

在鸿蒙系统中,当通过 fontSize 方法传递一个 数字 类型值时,默认的单位是 px(像素)。这意味着如果不指定单位,字体大小将被解释为像素值。

示例:
typescriptText('示例文字')  .fontSize(16);  // 默认使用 px 单位,字体大小为 16px 

如果你希望字体大小根据设备自动调整,则需要显式地使用 vpfp 等相对单位,例如:

typescriptText('示例文字')  .fontSize('16vp');  // 使用视口单位,字体大小为 16vp 

4. 总结

鸿蒙操作系统中提供了多种单位用于 UI 元素的大小和布局控制,这些单位的选择直接影响应用在不同设备上的适配效果。以下是各单位的应用建议:

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

Text 组件中,fontSize 属性可以接受多种类型的输入,通过合理使用这些单位,可以确保文本在不同设备上的一致性和适配性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实用技能分享!推荐最适合论文写作的5款ai工具

在当今学术研究和教育领域,AI工具的应用已经变得越来越普遍。这些工具不仅能够提高写作效率,还能帮助生成高质量的文稿。对于教师而言,选择合适的AI工具可以显著提升论文写作的效率和质量。本文将重点推荐五款最适合教师论文写作的AI工具&…

Linux聊天集群开发之环境准备

一.windows下远程操作Linux 第一步:在Linux终端下配置openssh,输入netstate -tanp,查看ssh服务是否启动,默认端口22.。 注:如果openssh服务,则需下载。输入命令ps -e|grep ssh, 查看如否配有, ssh-agent …

【重学 MySQL】四十六、创建表的方式

【重学 MySQL】四十六、创建表的方式 使用CREATE TABLE语句创建表使用CREATE TABLE LIKE语句创建表使用CREATE TABLE AS SELECT语句创建表使用CREATE TABLE SELECT语句创建表并从另一个表中选取数据(与CREATE TABLE AS SELECT类似)使用CREATE TEMPORARY …

【重学 MySQL】五十四、整型数据类型

【重学 MySQL】五十四、整型数据类型 整型类型TINYINTSMALLINTMEDIUMINTINT(或INTEGER)BIGINT 可选属性UNSIGNEDZEROFILL显示宽度(M)AUTO_INCREMENT注意事项 适合场景TINYINTSMALLINTMEDIUMINTINT(或INTEGER&#xff0…

Python 从入门到实战33(使用MySQL)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库编程接口操作的相关知识。今天我们将学习…

SLF4J(W): Class path contains multiple SLF4J providers.

问题背景 最近在给某AI项目集成阿里的通义千问SDK,发现竟然有个奇怪的报错,仔细一看发现,我类上用的lombok的Slf4j注释,阿里用的是org.slf4j.simple.SimpleServiceProvider,但是lombok用的是LogbackServiceProvider&a…

关于Vben Admin多标签页面缓存不生效的问题

情况说明 笔者在接手一个基于Vben Admin框架改造的vue3后台管理项目,客户要求在切换头部Tab页面时,不要刷新清空已经填写的表单页面或者表格。 然而,笔者根据Vben Admin的官方文档来配置多标签页面缓存后,页面每次切换后&#x…

Linux 应用层协议HTTP

文章目录 一、初始HTTP协议二、URL格式网络中怎么通过URL进行定位资源呢?编码和解码 三、HTTP的请求格式和响应格式HTTP的请求格式HTTP的响应格式HTTP的请求方法GET方法POST方法GET Vs PostHTTP的封装和分用文件流操作浏览器获得一个完整的网页流程 HTTP的状态码对3…

一、Linux下MySQL的安装与使用

文章目录 1. 基于docker安装mysql2. 字符集的相关操作2.1 修改MySQL5.7字符集2.2 各级别的字符集2.3 字符集与比较规则(了解)2.4 请求到响应过程中字符集的变化 3. SQL大小写规范3.1 Windows和Linux平台区别3.2 Linux下大小写规则设置3.3 SQL编写建议 4. sql_mode的合理设置4.1…

知识图谱入门——5:Neo4j Desktop安装和使用手册(小白向:Cypher 查询语言:逐步教程!Neo4j 优缺点分析)

Neo4j简介 Neo4j 是一个基于图结构的 NoSQL 数据库,专门用于存储、查询和管理图形数据。它的核心思想是使用节点、关系和属性来描述数据。图数据库非常适合那些需要处理复杂关系的数据集,如社交网络、推荐系统、知识图谱等领域。 与传统的关系型数据库…

端侧大模型系列 | 端侧AI Agent任务拆解大师如何助力AI手机?(简短版)

引言 简介 模型 实验 意义&前景: 总结 引言 今人不见古时月,今月曾经照古人。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖沙茶面的小女孩。 设想一下,你的智能手机不再只是"聪明"&#xff0…

12.梯度下降法的具体解析——举足轻重的模型优化算法

引言 梯度下降法(Gradient Descent)是一种广泛应用于机器学习领域的基本优化算法,它通过迭代地调整模型参数,最小化损失函数以求得到模型最优解。 通过阅读本篇博客,你可以: 1.知晓梯度下降法的具体流程 2.掌握不同梯度下降法…

力扣 中等 129.求根节点到叶子结点数字之和

文章目录 题目介绍解法 题目介绍 解法 法一:有返回值、 class Solution {public int sumNumbers(TreeNode root) {return dfs(root, 0);}public int dfs(TreeNode root, int x) {if (root null) {return 0;}x x * 10 root.val;if (root.left root.right) { //…

LC刷题专题:dfs、哈希表合集

自己刷题缺少分类思想,总是这里刷一道那里刷一道,以后建立几个专辑,然后自己新刷的同类型的题目都会即使更新上。 文章目录 690. 员工的重要性 690. 员工的重要性 2024-10-03 题目描述: 我第一次写并没有考虑到dfs,…

基于Arduino的L298N电机驱动模块使用

一.简介: L298N作为电机驱动芯片,具有驱动能力强,发热量低,抗干扰能力强的特点,一个模块可同时驱动两个直流电机工作,能够控制电机进行正转、反转、PWM调速。 说明: 1)12V输入端口接入供电电压…

esp32开发环境搭建和烧录测试

文章目录 前言一、硬件环境1、esp32开发板。2、两个micro usb 数据线,一路用于供电,另一路用于烧录和调试3、喇叭, 淘宝上买的 4 欧姆 3 W扬声器 二、软件环境配置1、开发软件2、ESP-IDF简介下载 3、vscode安装配置1、安装vscode2、安装IDF插…

论文提纲怎么写?分享5款AI论文写作软件

在学术研究和写作过程中,撰写高质量的论文是一项挑战性的任务。幸运的是,随着人工智能技术的发展,AI论文写作工具逐渐成为帮助学者和学生提高写作效率的重要工具。这些工具不仅能够提高写作效率,还能帮助简化复杂的写作流程&#…

C++(string类的实现)

1. 迭代器、返回capacity、返回size、判空、c_str、重载[]和clear的实现 string类的迭代器的功能就类似于一个指针,所以我们可以直接使用一个指针来实现迭代器,但如下图可见迭代器有两个,一个是指向的内容可以被修改,另一个则是指…

【JNI】hello world

JNI,作为java和C/C的中间层,为在Java中调用C/C代码提供了便利。作为初学者,这里简单记录学习的过程。 本文所有的操作都在kali linux上进行,jdk环境以及gcc,g编译器需自行提前安装好 操作系统: jdk&#…

行为型模式-命令-迭代-观察者-策略

命令模式 是什么 将一个请求封装成为一个对象, 从而可以使用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及可以撤销的操作 实例 请求封装成为对象 //用来声明执行操作的接口 public abstract class Command { protected Receiver receiver; public Comma…