首页 » AppInventor » App Inventor 入门:组件宽高的dp是什么?

App Inventor 入门:组件宽高的dp是什么?

使用过MIT版及其他版本 ai 的同学,一定看到组件宽高的单位是“像素”,英文版写的是“pixels”或“px”。这是错误的,严重误导初学者!ai 使用的长度不是 px 而是 dp。WxBit 版特意将宽高单位更正为“dp”,因为译文太长不做中文翻译的显示。


组件的宽高设置

px 全称是“Pixel”,即像素,是画面显示的最小单位。我们常说的分辨率就是以 px 为单位。例如小米10的屏幕是6.67英寸分辨率是 2340 x 1080 像素,表示该手机屏幕的对角线长度为6.67英寸,横向可以显示 1080 个像素,纵向是 2340 个像素。而红米27寸显示器的分辨率是 1920 x 1080,屏幕大很多,但是分辨率怎么跟手机差不多呢?这是因为手机的屏幕像素密度(PPI,Pixels per inch)更高,手机屏幕 PPI 为:sqr(2340x2340 + 1080x1080) / 6.67 = 386.4,显示器屏幕 PPI 为:sqr(1920x1920 + 1080x1080) / 27 = 81.6。


小米 10 的屏幕尺寸

将一张 108 x 108 px 的图片分别放到这2个屏幕按实际像素显示,图片占手机屏幕宽度的  1/10,占显示器高度的 1/10,看起来大小差别会很大,


图片按像素在显示器和手机显示的差异示意图

在 ai 中设置图像框的尺寸为 A(自动:-1)时,系统将根据图片的像素(px)尺寸显示,导致不同密度屏幕看到的图片大小不一样。如果我们希望在不同像素密度的屏幕,显示的大小差不多该怎么办呢?这就需要一种与屏幕像素密度无关的长度单位 —— dp。

dp 为 dip 的简写,全称是 “Density-independent Pixel”,翻译过来就是“密度无关的像素”,与 px 的换算关系:px = dp * (dpi / 160)。

注意,这里的 dpi 为 dots per inch,为安卓系统设置的值,与 PPI 没有直接的联系!默认值有160、240、320、480等,也可能是其他比较接近 PPI 的值。比如小米10,PPI 为 386,dpi 为 440。进入开发者选项,可以将 dpi 更改为其他值。


小米10更改屏幕宽度 dp 

宽高尺寸为 100 x 100 dp 的图像框,在小米10显示的大小是 275 x 275 px,图片被拉伸放大。WxBit 的屏幕组件提供了“屏幕逻辑密度(LogicalDensity”属性块,用于 dp 与 px 的换算。


dp 到 px 的换算

在 px 与 dp 的换算公式中,160 为基准屏幕密度,也叫 mdpi。此外还有 ldp 为 120,hdpi 为 240,xhdpi 为 320,xxhdpi 为 480 等预定义的密度。

有没有方法将图像框的宽高设置为 A,也能达到设置 dp 一样的效果呢?请记住上面预定义的屏幕密度,我们在介绍图像框时揭晓。

原文链接:App Inventor 入门:组件宽高的dp是什么?,转载请注明来源!