实例:
int padding =4;
padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4,
context.getResources().getDisplayMetrics());
解释:
padding的单位是:dip, padding的大小是:4
虽然是4dip,但是,不是最终padding的真实单位。
他是通过计算以后,4dp和密度系数相乘得到的一个值,实际上计算出来的padding单位是像素,也就是它的宽度。在不同dpi的屏幕上,这个值是不一样的。
即:将dp转化为px,返回的是一个dp对应的px数值。
如果这里是COMPLEX_UNIX_SP,就是讲sp转化为dp。
单位间的转换就用这个方法,可以将其封装成一个工具方法。
进一步理解:
applyDimension方法是将4像素转换为6dp(480x800)、4dp(320x800)、3dp(240x320), 所以返回的值对应不同的分辨率(通过getDisplayMetrics就得到了)就是6、4、3
源代码:
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;
}