問題一:
dp轉px,在網上搜到的答案中都是這麼寫的:
public static int dp2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
為什麼後面要加上0.5?
問題二:
在網上搜到dp和sp大體一樣,隻不過考慮到了使用者有可能設定了自定義的字型縮放偏好,是以有了這個sp機關,那麼sp這個機關應該如何轉換為像素值呢(考慮使用者自定義字型縮放偏好)?
我在android.util.TypedValue類中找到了這個方法,可以完成換算
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;
}