dp、px、sp之间的转换可以用系统提供的TypeValue类中的applyDimension(unit, value, metrics);
其中参数1:value的单位,如dp、sp、px等更多的长度单位,参数2:长度即要转换的值,参数3:context.getResources().getDisplayMetrics();通过这个方法的源码可知,只能转换成px。
下面是dp、px、sp之间的互转:
//px转换成dip
public static int px2dip(Context context ,float pxValue){
float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue/scale + 0.5f);
}
//dip转换成px
public static int dip2px(Context context , float dipValue){
float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue * scale + 0.5f);
}
//px转换成sp
public static int px2sp(Context context ,float pxValue){
float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int)(pxValue / fontScale + 0.5f);
}
//sp转换成px
public static int sp2px(Context context , float spValue){
float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int)(spValue * fontScale + 0.5f);
}