对于Android Density 的理解(dp sp pix)

对于Android Density 的理解(dp sp pix)

在Android系统开发过程中需要对各种各样的手机版本进行适配,而编写布局文件时希望可以使用相同的布局元素以及空间距离,实现在不同尺寸的屏幕上显示的效果一致。

像素密度(Pixel density)

手机屏幕的像素密度取决于不同的手机本身,与手机的尺寸以及像素值有关。与手机无关“像素”以及可缩放的“像素”可以提供灵活方式在不同的手机上进行适配

像素密度计算

每一英寸(2.54厘米)像素点的数目被定义为像素密度,高分辨率的手机比低分辨率的手机在单位英寸上有更多的像素点。

计算像素密度公式:像素密度=屏幕高(宽)的像素点个数/屏幕高(宽)英寸

对于Android Density 的理解(dp sp pix)

左图高分辨率图片,右图低分辨率图片

当使用同一像素尺寸来表示UI元素,在高分辨率的手机上显示的会比在低分辨率的手机上显示“小”,如上图所示,因此在布局文件中不可以使用像素值pix来表示布局元素的大小以及位置等。

Density的无关性

Density无关性指的是UI元素在屏幕上显示的是同一种样式,但使用的是不同的Density,即不同手机有不同的Density,但使用相同的Density的值可以显示为相同的大小,如下图所示。

对于Android Density 的理解(dp sp pix)

左图低分辨率,右图高分辨率

Density无关性,在布局文件中使用dp来表示多种手机的不同Density。

像素Density在Android中的使用

在开发Android应用时,使用dp使得布局元素在不同像素密度的手机上显示为相同的布局的大小。

官方给的dp的计算方式 :dp=(水平方向的像素点*160)/屏幕密度
实际计算方式可以用:dp=屏幕宽度*160

屏幕宽度(in) 屏幕密度 屏幕宽度(px) 屏幕宽度(dp)
1.5in 120 180px 240dp
1.5in 160 240px 240dp
1.5in 240 360px 240dp

可伸缩的像素Scalable pixs(sp)

sp和dp有着相同的功能,但是sp是应用于文字中的,sp的默认的值与dp的默认值是相同的。sp和dp的本质的区别在于,sp会受到用户手机字体的限制。当用户将自己手机字号设置为larger时,手机APP使用sp设置的字号将会自动匹配用户的字号设置。