實(shí)例:
int padding =4;
padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4,
context.getResources().getDisplayMetrics());
解釋:
padding的單位是:dip, padding的大小是:4
雖然是4dip,但是,不是最終padding的真實(shí)單位。
他是通過(guò)計(jì)算以后,4dp和密度系數(shù)相乘得到的一個(gè)值,實(shí)際上計(jì)算出來(lái)的padding單位是像素,也就是它的寬度。在不同dpi的屏幕上,這個(gè)值是不一樣的。
即:將dp轉(zhuǎn)化為px,返回的是一個(gè)dp對(duì)應(yīng)的px數(shù)值。
如果這里是COMPLEX_UNIX_SP,就是講sp轉(zhuǎn)化為dp。
單位間的轉(zhuǎn)換就用這個(gè)方法,可以將其封裝成一個(gè)工具方法。
進(jìn)一步理解:
applyDimension方法是將4像素轉(zhuǎn)換為6dp(480x800)、4dp(320x800)、3dp(240x320), 所以返回的值對(duì)應(yīng)不同的分辨率(通過(guò)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;
}