您的位置:首页 > 移动开发 > Android开发

Android中的长度单位详解

2013-04-25 16:07 204 查看
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
plaincopy

/**

* 密度常量设置,提供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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: