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的工具类。
- /**
- * 密度常量设置,提供dip转换为px的方法
- *
- * @author zuolongsnail
- *
- */
- public final class DensityConst {
- /** 默认密度 */
- public static float density = 1.0f;
- /** 默认每英寸像素数 */
- public static int densityDpi = 160;
- /**
- * 初始化与密度相关的所有变量值
- *
- * @param activity
- */
- public static void initDensity(Activity activity) {
- DisplayMetrics dm = new DisplayMetrics();
- activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
- density = dm.density;
- densityDpi = dm.densityDpi;
- }
- /**
- * dip转化为像素
- *
- * @param dip
- * @return
- */
- public static int getPx(int dip) {
- return (int) (dip * density);
- // return (int)(dip*(densityDpi/160));
- }
- /**
- * 像素转化为dip
- *
- * @param px
- * @return
- */
- public static int getDip(int px) {
- return (int) (px / density);
- // return (int)((px*160)/densityDpi);
- }
- }
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万色显示效果是最好的