android 一道关于dp,sp,px 的面试题

版权声明:本文为博主原创文章,转载希望能注明出处,感谢。 https://blog.csdn.net/u010126792/article/details/82837801

题目:

android 开发中常用的尺寸单位是什么:

dp   sp    px

dp 和px的区别,两个不同大小的屏幕dp和px的表现有什么区别

dp与设备密度无关,dp不同尺寸屏幕显示效果不同,但是控件尺寸大小相同,所以最终结论是dp是具体的物理尺寸,与

设备密度无关。

px屏幕上的点,与密度相关,密度大了,单位面积上的px会比较多,px就显得比较小。设置160px在小屏幕上占据大范围,但是到了大屏手机上可能占屏幕一半的宽度都不到。

sp 与dp类似,但是sp受系统设置字体大小的影响,如果使用sp,系统设置了字体大小设置sp的字体就会变化。

像素密度知道吗,dp的计算方式,保证了不同屏幕密度dp大小一样

PPI = Pixels per inch,每英寸上的像素数,即 "像素密度" ,或者叫做dpi,dots per inch 。

PPI = √(长度像素数² + 宽度像素数²) /(屏幕对角线英寸数) //对角线像素数除以对角线长度

px = dp * ppi /160

dp = px * 160 / ppi

px = dp *(context.getResources().getDisplayMetrics().density ) + 0.5 

上面公式获取的density应该是ppi/160后的值。

特殊情况,在HVGA分辨率设备上dp和px是一样的(表现一样),在每英寸160点的显示器上,1dp = 1px,所以所有的计算都是以160的屏幕为基准的。

上面ppi的计算公式没有问题但是注意上面的计算公式虽然没有错,但是dp计算中使用的却不是上面的ppi。

android手机屏幕碎片化严重,如果按照上面的计算公式虽然获取到的dp更准确但是我们适配将更加的麻烦,将会出现无穷多的ppi,android开发过程中为了适配通常把图片资源放在xhdpi,xxhdpi中,实际上上面的计算公式并没有错,只需要把ppi改变一下就行,不是利用屏幕真实的像素密度而是利用归一化后的像素密度。举个例子如果只提供了一套资源,在小屏手机上正常显示,在大屏手机上就会被拉伸。

drawable-ldpi ( 当dpi为120时,使用此目录下的资源)
drawable-mdpi ( 当dpi为160时,使用此目录下的资源)
drawable-hdpi ( 当dpi为240时,使用此目录下的资源)
drawable-xhdpi ( 当dpi为320时,使用此目录下的资源)
drawable-xxhdpi ( 当dpi为480时,使用此目录下的资源)
Android正是根据设备ppi值得不同,选择清晰度不同的资源使用,完成屏幕的适配,如果只有一个文件夹中有资源,系统检测到屏幕ppi和资源所在目录的dpi不同,就会对资源进行缩放。

一般情况下,240×320的屏幕是低密度120dpi,即ldpi;320×480的屏幕是中密度160dpi,即mdpi;480×800的屏幕是高密度240dpi,即hdpi;720×1280的屏幕是超高密度320dpi,即xhdpi;1080×1920的屏幕是超超高密度480dpi,即xxhdpi。这个尺寸在手机出厂时就设定好了。

sp和dp有什么区别,是不是所有的字体设置都是使用sp

sp专用于设置字体,会随系统字体大小的设置而改变,不是设置字体必须用sp,为了保持字体大小不变,类似微信聊天界面

字体就不受系统设置影响。

猜你喜欢

转载自blog.csdn.net/u010126792/article/details/82837801
今日推荐