首先来看屏幕密度DPI和分辨率PPI
DPI
DPI的全称是 Dots Per Inch,Inch是一个物理单位(无论在任何设备上,其大小都是固定的),所以DPI就指在一个Inch的物理长度内有多少个Dot,160DPI的屏幕就表示一个Inch包含160个Dot。Android设备用DPI来表示屏幕密度(Density),屏幕密度大就表示一个Inch包含的Dot比较多。
PPI
其实对Android而言,DPI等价于PPI(Pixels-Per-Inch)。
enter description here
通常我们说一个设备是多少寸时,指的是屏幕对角线(Diagonal)是多少inch,所以用对角线的像素值(px)除以对角线长度(inch),就可以计算出PPI。
enter description here
Android中有哪些尺寸单位?
主要包括:dp,sp,pt,px,mm,in
dp
即dip(Density-independent Pixels),是一种与屏幕密度无关的尺寸单位,当屏幕密度是160dpi时,1dp = 1px。当运行在高dpi的屏幕上时,dp就会按比例放大,当运行在低dpi的屏幕上时,dp就会被按比例缩小。
当屏幕密度是320时,1dp = 2px,因此dp是一种简单的解决view在不同大小屏幕上显示的问题的解决办法。
sp
sp(Scale-independent Pixels)和dp是比较相似的,但是它会随着用户对系统字体大小的设置进行比例缩放,换句话说,它能够跟随用户系统字体大小变化。所以它更加适合做为字体大小的单位。
pt
pt(Point)是一个基于屏幕大小的物理尺寸,1pt等于1/72英寸(inch)。(不常用)
px
px(Pixels)相当于实际屏幕的像素,由于不同屏幕的像素数差异比较大,因此这个单位不被推荐用于尺寸单位,
mm
mm(Millimeters)即毫米,这是一个基于屏幕物理尺寸的单位。(不常用)
in
in(Inches)即英寸,也是一个基于屏幕物理尺寸的单位。(不常用)
dp与px之间的换算
px = dp * (dpi / 160)
举例来说,小米Pad的屏幕密度为326dpi,如果需要显示的图片大小为20dp,那么就需要提供一个 20 (326 / 160) = 40px的图片才能达到最佳显示效果,如果还要适配一个163dpi的屏幕,那么还需要再提供一个20 (163 / 160) = 20px的图片。
各个尺寸之间的转换
dp转px
public static int dip2px(Context context,float dipValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue*scale+ 0.5f);
}
注意:这块为啥没有160呢?
因为查看源码就知道了。
px转dp
public static int px2dip(Context context,float px){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(px/scale +0.5f);
}
sp转px
public static int sp2px(Context context,float spValue){
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int)(spValue*fontScale+0.5f);
}
px转sp
public static int px2sp(Context context,float pxValue){
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int)(pxValue/fontScale+0.5f);
}
mm转in
public static double mm2in(double mmValue){
return mmValue*(10/254);
}
in转mm
public static double in2mm(double inValue){
return inValue*(25.4);
}
参考链接:
http://www.jianshu.com/p/913943d25829
http://blog.csdn.net/wenwen091100304/article/details/49744951
网友评论