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);
- }
- }