作為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 + f);
}
/**
* px(像素) 轉成為 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + f);
}
下面介紹官方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 * (f/);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (f/f);
}
return ;
}
這樣,根據我們的項目需求調用源碼方法寫公共轉換方法。大家想怎麼轉換,隻需改下unit值就可以,下面舉個例子:
/**
* dip轉px
*/
public static int dpToPx(Context context, float dp) {
return (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
}
如有錯誤,敬請指正。