首先来看屏幕密度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

更多相关文章

  1. android动态修改横竖屏
  2. Android屏幕适配小结
  3. ReactNative全面屏(Android)适配问题
  4. android應用what to test?
  5. Android(安卓)设计秘籍 part1
  6. Android(安卓)vitamio、节操、ijkplayer视频播放器优缺点对比
  7. Android:支持不同分辨率的屏幕设计
  8. Android2.3 Google Nexus S抢先介绍
  9. 【入门篇】Android学习笔记——项目结构及相关基础知识

随机推荐

  1. Android编译系统二
  2. Android本地语音识别引擎PocketSphinx-语
  3. 配置Android开发环境
  4. Eclipse 中打不开android sdk managerf
  5. android boot 代码流程
  6. Android:音乐特效控制
  7. 五.在Android中实现线程的方法
  8. Android:activity context, application
  9. android前端与java web后台的ssl交互
  10. Android中设置控件可见与不可见详解