Android中的dp,sp计算

首先介绍PPI(DPI),PPI和DPI其实都是相同的一个概念,只不过DPI是dots per inch和 PPI是pixels per inch。

一般我们说的5寸手机,5.5寸手机指的是手机屏幕对角线的长度。

根据勾股定理计算出对角线上的像素点个数,用来除以手机尺寸,即可得到PPI(DPI)值。

比如:

5寸,1920x1080分辨率,PPI=√(1920*+1080*)/5=440.5814340164597=441;

5.7寸,1920x1080分辨率,PPI=√(1920*+1080*)/5.7=386.4749421197015=387。

每个android手机的PPI(DPI)已经固定在rom里面了,一般不可以改变,可以通过DisplayMetrics类获取手机的DPI:

DisplayMetricsdisplayMetrics=getResources().getDisplayMetrics();

System.out.println("densityDpi:"+displayMetrics.densityDpi);

DPI对应DisplayMetrics类中的densityDpi,DisplayMetrics类的属性如下;

Android中的dp,sp计算_第1张图片

Android中的dp,sp计算_第2张图片

每个不同尺寸不同分辨率的手机,DisplayMetrics类中的density,scaledDesity等值都是不同的。

android中的dp,sp计算规则出自TypedValue类中,代码如下:

public static float applyDimension(int unit, float value,DisplayMetrics metrics)

{

switch (unit) {

case COMPLEX_UNIT_PX:

return value;

case COMPLEX_UNIT_DIP:

return value * metrics.density;

case COMPLEX_UNIT_SP:

return value * metrics.scaledDensity;

case COMPLEX_UNIT_PT:

return value * metrics.xdpi * (1.0f/72);

case COMPLEX_UNIT_IN:

return value * metrics.xdpi;

case COMPLEX_UNIT_MM:

return value * metrics.xdpi * (1.0f/25.4f);

}

return 0;

}

你可能感兴趣的:(Android中的dp,sp计算)