HarmonyOS 鸿蒙Next的vp、fp与Android的dp、sp联系与区别
HarmonyOS 鸿蒙Next的vp、fp与Android的dp、sp联系与区别 由于手机分辨率不同,应用中用到的图片某个固定尺寸大小的图片,或某个固定字号的文本就会因手机分辨力不同而出现失真或变形的情况,为了更好的适配不同的手机,故而就有了不依赖与像素的单位。Google定义了dp、sp,而与之对应的HarmonyOS则定义了vp、fp。这些又有哪些联系和区别呢?
px
px:像素的单位,1px代表手机屏幕上的一个像素点。比如常见的手机分辨率有320×480,480×800,1080×1920等,这些数值的单位都是px;由于px在不同手机上的大小不同,差别较大,适配性太差,不建议使用。
dpi
为了说明sp与dp,先来了解下dpi。
dpi:dots per inch,代表屏幕像素密度。其计算公式为:
[ \text{dpi} = \sqrt{(w^2 + h^2)} / \text{size} ]
其中,w表示宽度像素值,h表示高度像素值,size表示屏幕尺寸(英尺)。如某手机屏幕分辩率为1080×1920,屏幕尺寸为5inch,则dpi=440。在Android应用程序的mipmap或drawable目录下,根据dpi的不同分为ldpi、mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi等。
密度density指屏幕上每平方英寸(2.542 平方厘米)中含有的像素点数量,不同于分辨率:
- ldpi(low):适用于低密度(ldpi)屏幕(0-120dpi)的资源,1dp=3/4px。
- mdpi(medium):适用于中密度(mdpi)屏幕(120-160dpi)的资源,1dp=1px。
- hdpi(high):适用于高密度(hdpi)屏幕(160-240dpi)的资源,1dp=1.5px。
- xhdpi(extra-high):适用于超高密度(xhdpi)屏幕(240-320dpi)的资源,1dp=2px。
- xxhdpi(extra-extra-high):适用于超超高密度(xxhdpi)屏幕(320-480dpi)的资源,1dp=3px。
- xxxhdpi(extra-extra-extra-high):适用于超超超高密度(xxxhdpi)屏幕(480-640dpi)的资源,1dp=4px。
dp
dp:device independent pixels(设备独立像素,等同于dip),不依赖于像素,在不同分辨率的手机上可自动缩放。一般定义1dp为160dpi时的一个像素大小,那么,如果手机分辨率是320dpi,则1dp相当于2px。所以dp在不同分辨率的手机上可以自动伸缩,适配性较好,建议项目中的尺寸等长度单位使用dp。
- 在每英寸160点(即160dpi)的显示器上,1dp=1px。
- 在320480分辨率,像素密度为160时,1dp=1px。
- 在480800分辨率,像素密度为240时,1dp=1.5px。
sp
sp:scale-independent pixels(缩放独立像素,等同于sip),和dp类似,允许由用户自定义文字尺寸大小(如小、正常、大、超大等),当文字尺寸是“正常”时,1sp=1dp=0.00625inch(英寸),当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625inch。因此,sp亦可缩放,以适配不同分辨率的手机。建议项目中的文字大小的单位使用sp。
vp
vp:virtual pixels(虚拟像素),指一台设备针对应用而言所具有的虚拟尺寸。HarmonyOS 重新定义了界面换算单位,使用虚拟像素作为一台设备针对应用而言所具有的虚拟尺寸,是定义应用内参数尺寸的度量单位。虚拟像素也是一种可灵活使用和缩放的单位,它与屏幕像素的关系是 1vp 约等于 160dpi 屏幕密度设备上的 1px。在不同密度的设备之间,HarmonyOS 会针对性的转换设备间对应的实际像素值。
fp
fp:font-size pixels,字体像素单位,其大小规范默认情况下与vp相同,但如果开发者在设置中修改了字体显示大小,就会在vp的基础上乘以scale系数。即默认情况下 1 fp = 1vp,如果设置了字体显示大小,则会根据实际情况自动设置 1fp = 1vp * scale。
总结
因此在HarmonyOS则定义了vp、fp时,可以直接参照Android使用的dp、sp的场景,与之对应起来理解和开发即可。简单来说,涉及尺寸时用vp、dp,涉及字体时用fp、sp,这样是否很简单?
以上内容转载自 https://developer.huawei.com/consumer/cn/forum/topic/0202669455953940178
更多关于HarmonyOS 鸿蒙Next的vp、fp与Android的dp、sp联系与区别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS 鸿蒙Next中的vp(虚拟像素)和fp(字体像素)与Android中的dp(密度无关像素)和sp(缩放独立像素)在概念上有相似之处,但实现方式和应用场景有所不同。
-
vp(虚拟像素):vp是鸿蒙Next中用于布局的尺寸单位,类似于Android中的dp。vp的设计目的是为了在不同屏幕密度下保持一致的视觉尺寸。1vp在鸿蒙中等于屏幕的物理像素密度(PPI)的1/160,这意味着在160PPI的屏幕上,1vp等于1物理像素。与Android的dp类似,vp通过屏幕密度进行缩放,确保在不同设备上显示效果一致。
-
fp(字体像素):fp是鸿蒙Next中用于字体大小的单位,类似于Android中的sp。fp的设计考虑了用户的字体缩放偏好,允许用户根据个人需求调整字体大小。与sp类似,fp会根据系统设置的字体缩放比例进行调整,确保字体在不同设备上保持可读性。
-
区别:
- 单位定义:vp和fp是鸿蒙Next特有的单位,而dp和sp是Android中的标准单位。
- 缩放机制:vp和fp的缩放机制与dp和sp类似,但具体实现细节可能有所不同,尤其是在鸿蒙Next的分布式架构下,vp和fp的缩放可能更加灵活。
- 应用场景:vp主要用于布局尺寸,fp用于字体大小,这与dp和sp在Android中的应用场景一致。
总结来说,鸿蒙Next的vp和fp与Android的dp和sp在功能上相似,都是为了在不同设备上保持一致的视觉和字体效果,但它们是鸿蒙Next特有的单位,具体实现和应用细节可能有所不同。
更多关于HarmonyOS 鸿蒙Next的vp、fp与Android的dp、sp联系与区别的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS 鸿蒙Next的vp(虚拟像素)和fp(字体像素)与Android的dp(密度无关像素)和sp(缩放独立像素)在概念上相似,均用于解决不同设备屏幕尺寸和分辨率的适配问题。vp和dp都是基于屏幕密度的单位,用于布局和尺寸定义,确保在不同设备上显示一致。fp和sp则用于字体大小,sp会根据用户设置的字体大小偏好进行缩放,而fp则固定基于屏幕密度。主要区别在于鸿蒙Next的vp和fp更注重跨设备一致性,而Android的dp和sp则更侧重于单一平台内的适配。