重新总结,对于dp和sp来说,这几个函数效果一样,不过对于px来说就不一样啦,评论里说的很对.
10.5px
10.5dp
10.5sp
float px1= getResources().getDimension(R.dimen.d_px10_5);
int px2= getResources().getDimensionPixelOffset(R.dimen.d_px10_5);
int px3= getResources().getDimensionPixelSize(R.dimen.d_px10_5);
L.d(TAG," d_px10_5 getDimension = "+px1);
L.d(TAG," d_px10_5 getDimensionPixelOffset = "+px2);
L.d(TAG," d_px10_5 getDimensionPixelSize = "+px3);
float dp1= getResources().getDimension(R.dimen.d_dp10_5);
int dp2= getResources().getDimensionPixelOffset(R.dimen.d_dp10_5);
int dp3= getResources().getDimensionPixelSize(R.dimen.d_dp10_5);
L.d(TAG," d_dp10_5 getDimension = "+dp1);
L.d(TAG," d_dp10_5 getDimensionPixelOffset = "+dp2);
L.d(TAG," d_dp10_5 getDimensionPixelSize = "+dp3);
float sp1= getResources().getDimension(R.dimen.d_sp10_5);
int sp2= getResources().getDimensionPixelOffset(R.dimen.d_sp10_5);
int sp3= getResources().getDimensionPixelSize(R.dimen.d_sp10_5);
L.d(TAG," d_sp10_5 getDimension = "+sp1);
L.d(TAG," d_sp10_5 getDimensionPixelOffset = "+sp2);
L.d(TAG," d_sp10_5 getDimensionPixelSize = "+sp3);
输出
E: d_px10_5 getDimension = 10.5
E: d_px10_5 getDimensionPixelOffset = 10
E: d_px10_5 getDimensionPixelSize = 11
E: d_dp10_5 getDimension = 42.0
E: d_dp10_5 getDimensionPixelOffset = 42
E: d_dp10_5 getDimensionPixelSize = 42
E: d_sp10_5 getDimension = 42.0
E: d_sp10_5 getDimensionPixelOffset = 42
E: d_sp10_5 getDimensionPixelSize = 42
转换
/**
* dp转换成px
*/
public static int dp2px(Context context,float dpValue){
float scale=context.getResources().getDisplayMetrics().density;
return (int)(dpValue*scale+0.5f);
}
/**
* px转换成dp
*/
public static int px2dp(Context context,float pxValue){
float scale=context.getResources().getDisplayMetrics().density;
return (int)(pxValue/scale+0.5f);
}
/**
* sp转换成px
*/
public static int sp2px(Context context,float spValue){
float fontScale=context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue*fontScale+0.5f);
}
/**
* px转换成sp
*/
public static int px2sp(Context context,float pxValue){
float fontScale=context.getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue/fontScale+0.5f);
}