作为Android开发者,大家对美工(或UI)给的界面图一定很抓狂,项目的界面都是以IOS为标准,控件之间的间距、字体大小都是使用px,然而作为Android开发人员都知道我们都是使用dp和sp ,为了使dp或sp变成px,大家一定常用如下方法进行转换:
/**
* dp 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* px(像素) 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
下面介绍官方TypedValue这个类提供的转换方法:
public static float applyDimension(int unit, float value,
DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
这样,根据我们的项目需求调用源码方法写公共转换方法。大家想怎么转换,只需改下unit值就可以,下面举个例子:
/**
* dip转px
*/
public static int dpToPx(Context context, float dp) {
return (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
如有错误,敬请指正。