天天看點

android sp to px,dp轉換為px 和 sp轉換為px

問題一:

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;

}