现在的位置: 首页 > 移动开发 > 正文

Android中的长度单位详解

2018年12月11日 移动开发 ⁄ 共 2871字 ⁄ 字号 评论关闭

http://blog.csdn.net/zuolongsnail/article/details/6397768

in(英寸)长度单位(基本用不到)
mm(毫米)长度单位(基本用不到)
pt(point磅)1/72英寸,标准的长度单位(基本用不到)

 

px(pixel像素)指的是屏幕上的点
dp(与密度无关的像素)一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp=1px
dip(device independent pixels设备独立像素) 不同设备有不同的显示效果,这个和设备硬件有关。
sp(scaled pixels放大像素)与dp类似,主要用于字体显示(best for textsize)

 

dip和px的区别及其转换
区别:
在DisplayMetrics.densityDpi=160的设备上,DisplayMetrics.density是等于1.0的(通过查看DisplayMetrics的SDK源代码得知),此时1dip=1px。但是换到其他不同density的设备上,dip和px的大小就不一样了,px在任何密度的设备上几何长度都是一样的,而dip会根据设备密度变化的。所以在开发中布局时尽量使用dip而少使用px。dpi表示每英寸像素数,读者可以参考这篇文章:
(hdpi,mdpi,ldpi)和WVGA,HVGA,QVGA的区别以及联系
转换:
dip和px之间的转换很简单,下面是dip和px的工具类。

[java] view
plain
copy

  1. /** 
  2.  * 密度常量设置,提供dip转换为px的方法 
  3.  *  
  4.  * @author zuolongsnail 
  5.  *  
  6.  */  
  7. public final class DensityConst {  
  8.     /** 默认密度 */  
  9.     public static float density = 1.0f;  
  10.     /** 默认每英寸像素数 */  
  11.     public static int densityDpi = 160;  
  12.   
  13.     /** 
  14.      * 初始化与密度相关的所有变量值 
  15.      *  
  16.      * @param activity 
  17.      */  
  18.     public static void initDensity(Activity activity) {  
  19.         DisplayMetrics dm = new DisplayMetrics();  
  20.         activity.getWindowManager().getDefaultDisplay().getMetrics(dm);  
  21.         density = dm.density;  
  22.         densityDpi = dm.densityDpi;  
  23.     }  
  24.   
  25.     /** 
  26.      * dip转化为像素 
  27.      *  
  28.      * @param dip 
  29.      * @return 
  30.      */  
  31.     public static int getPx(int dip) {  
  32.         return (int) (dip * density);  
  33.         // return (int)(dip*(densityDpi/160));  
  34.   
  35.     }  
  36.   
  37.     /** 
  38.      * 像素转化为dip 
  39.      *  
  40.      * @param px 
  41.      * @return 
  42.      */  
  43.     public static int getDip(int px) {  
  44.         return (int) (px / density);  
  45.         // return (int)((px*160)/densityDpi);  
  46.     }  
  47. }  

http://bbs.chinaunix.net/thread-3638322-1-1.html

  • Screen size (屏幕尺寸):具体的屏幕物理长度,以对角线长度做为标识,平时我们说的3”屏,7”屏就是指这个,是物理尺寸
  • Resolution (分辨率):屏幕上总共的物理像素点,虽然经常被以800X600之类的来描述,但是在android中,他并不指代具体的屏幕宽高比例,注意,分辨率和屏幕大小没有任何联系,分辨率只是描述点的而已,所以相同分辨率下,屏幕越小,越清晰
  • density(密度) :表示每英寸有多少个显示点,density是以分辨率为基础,即指在固定分辨率上散开的像素点,也即是说屏幕的density越大,单位上分散的像素就越多,可以理解为点距就越小,这样如果某个元素是以px为单位的,那么在低密度的屏幕上就会变大,应用程序可以通过指定high-dpi等三种资源来实现平台的独立性
  • 另外和android平台相关的还有的概念:

    • ASPECT RATIO (宽高比例):也就是平时我们说的4比3之流
    • Density-independent pixel(dip):dip是一种虚拟的像素单位,专门用来给程序定义UI用,Android高度推荐使用这个,可以为不同的dip设置不同的资源进行自动切换
      pixels = dips * (density / 160)即dip相当于屏幕density=160时的一个像素点,
      density=160时是一个点显示一个像素,而density=240时是3个点显示两个像素,图像看起来大一些,真实像素只有1280*2/3px,800*2/3px。
    • (同一宽度(2英寸)的屏幕,但是一个像素数是360,density = 160,另一个屏幕的像素是720,density=360;如果要画160dip的线条,对于第一个屏幕就是划了160个像素,占屏幕一般,第二个屏幕就是划了320个像素,也占屏幕的一半)
    • Dot per inch(DPI) :

      就是一英寸上显示的点,而这个点并不是意义上的像素。
      一般来说,显示器是96DPI,也就是说96像素等于1inch,但实际上不应该是这样,因为显示器的分辨率可以调整。
      对于你上面所说的显示器设置,96DPI可以理解为用96象素来表示一英寸,而变成120DPI的时候,是用120像素来表示一英寸,而系统的对象(字体,图像)的是用英寸数来表示的,所以120DPI时,图象和字体就变大了。

      就是一英寸上显示的点,而这个点并不是意义上的像素。 一般来说,显示器是96DPI,也就是说96像素等于1inch,但实际上不应该是这样,因为显示器的分辨率可以调整。

      对于你上面所说的显示器设置,96DPI可以理解为用96象素来表示一英寸,而变成120DPI的时候,是用120像素来表示一英寸,而系统的对象(字体,图像)的是用英寸数来表示的,所以120DPI时,图象和字体就变大了。

    • 色阶 :也就是平时我们说的 65536色,26万色,1600万色并没有数字看起来差别那么大,这实际上只是表示相邻的三个色阶而已,当然,1600万色显示效果是最好的

【上篇】
【下篇】

抱歉!评论已关闭.