由于各种手机的屏幕密度不同,导致同样像素大小的长度,在不同密度的屏幕上显示长度不同。在程序中,可以非常方便的对这些单位进行转换。下面代码给出了一种转换的方法。
/**
* dp、sp转换为px的工具类
*
* Created by Administrator on 2016/8/6.
*/
public class DisplayUtil {
/**
*将px值转换为dip或dp,保证尺寸大小不变
*
*@auther Dunn Lin
*@param pxValue
*@return
*create at 2016/8/6 11:54
*/
public static int px2dip(Context context,float pxValue){
//scale(DisplayMetrics类中density属性)
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(pxValue/scale+0.5f);
}
/**
* 将dip或dpz值转换为px值,保证尺寸大小不变
*@auther Dunn Lin
*@param dipValue
*@return
*create at 2016/8/6 12:00
*/
public static int dip2px(Context context,float dipValue){
//scale(DisplayMetrics类中density属性)
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue*scale + 0.5f);
}
/**
* 将px值转换为sp值,保证文字大小不变
*
*@auther Dunn Lin
*@param pxValue
*@return
*create at 2016/8/6 12:12
*/
public static int px2sp(Context context,float pxValue){
//fontScale(DisplayMetrics类中属性scaleDensity)
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int)(pxValue/fontScale+0.5);
}
/**
* 将sp值转换为px值,保证字体大小不变
*
*@auther Dunn Lin
*@param spValue
*@return
*create at 2016/8/6 12:19
*/
public static int sp2px(Context contex,float spValue){
//fontScale(DisplayMetrics类中属性scaleDensity)
final float fontScale = contex.getResources().getDisplayMetrics().scaledDensity;
return (int)(spValue*fontScale+0.5f);
}
}