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

Android尺寸单位总结

2014-05-05 18:30 405 查看
Android中常见的尺寸单位有如下几个:

dp(dip)、sp、pt、px、mm、 in 

dp——Density-independent Pixels,也即dip,是一种密度无关的像素单位,它是基于屏幕物理密度的抽象单元。一般认为在密度160dpi(dots per inch,每英寸点数)的设备上,1dp大致等于1px。dp与px并不总是一比一的关系,当密度变大或变小时,dp与px之间便存在一个比例因子,下边会给出一个换算公式。因此在设置width和height时,建议使用dp,它会根据屏幕大小自适应,如果使用px则会导致在不同尺寸屏幕上得到的效果不同。

sp——Scale-independent Pixels,设置字体的大小时建议使用sp,它也可以针对不同屏幕大小作自适应。

pt——Points,它是基于屏幕的物理尺寸的,大小为1英寸的1/72。

px——Pixels,它是屏幕上的实际像素,一般不建议使用px,因为不同屏幕的像素数是不一样的。

mm——Millimeters,指物理尺寸毫米。

in——Inches,指物理尺寸英寸,1英寸=2.54厘米。

dp与px的换算公式:

px = dp * (densityDpi/160)

dp = (px*160)/densityDpi

其中densityDpi——The screen density expressed as dots-per-inch即每英寸的点数,获取方式:context.getResources().getDisplayMetrics().densityDpi;

还可以直接获取比例因子,即scaling factor = context.getResources().getDisplayMetrics().density;  

对应关系为:scaling factor = densityDpi / 160。

参考资料:http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

===========================================================================

一般新建Android工程会生成以下几个资源文件夹:

drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi、drawable-xxhdpi,它们是为了屏幕适配,分别对应着不同的ppi(pixel per inch),跟dpi一个概念。

完整的对应关系:

drawable-ldpi——120ppi——1dp——0.75px(表示如果将1个dp换算成px的话,则是0.75px)

drawable-mdpi——160ppi——1dp——1px(表示如果将1个dp换算成px的话,则是1px)

drawable-hdpi——240ppi——1dp——1.5px(表示如果将1个dp换算成px的话,则是1.5px)

drawable-xhdpi——320ppi——1dp——2px(表示如果将1个dp换算成px的话,则是2px)

drawable-xxhdpi——480ppi——1dp——3px(表示如果将1个dp换算成px的话,则是3px)

===========================================================================

dp、px、sp之间的换算公式如下:

<span style="font-size:14px;">/**
* 将px值转换为dip或dp值,保证尺寸大小不变
*
* @param pxValue
* @param scale
* (DisplayMetrics类中属性density)
* @return
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}

/**
* 将dip或dp值转换为px值,保证尺寸大小不变
*
* @param dipValue
* @param scale
* (DisplayMetrics类中属性density)
* @return
*/
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}

/**
* 将px值转换为sp值,保证文字大小不变
*
* @param pxValue
* @param fontScale
* (DisplayMetrics类中属性scaledDensity)
* @return
*/
public static int px2sp(Context context, float pxValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / fontScale + 0.5f);
}

/**
* 将sp值转换为px值,保证文字大小不变
*
* @param spValue
* @param fontScale
* (DisplayMetrics类中属性scaledDensity)
* @return
*/
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
} </span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android dp px sp ppi