核心公式
px = dp * density
dp = px / density
density = dpi / 160 (如 mdpi=1.0, hdpi=1.5, xhdpi=2.0, xxhdpi=3.0, xxxhdpi=4.0)
工具類實現
public class DensityUtils {
private DensityUtils() {}
public static int dp2px(Context context, float dp) {
return (int) (dp * context.getResources().getDisplayMetrics().density + 0.5f);
}
public static int px2dp(Context context, float px) {
return (int) (px / context.getResources().getDisplayMetrics().density + 0.5f);
}
public static int sp2px(Context context, float sp) {
return (int) (sp * context.getResources().getDisplayMetrics().scaledDensity + 0.5f);
}
}
使用示例
int marginPx = DensityUtils.dp2px(this, 16); // 16dp 轉像素
int textSp = DensityUtils.px2sp(this, 24); // 像素轉 sp
注意
- 傳入
Context 獲取 DisplayMetrics,避免靜態初始化時未附加上下文。
+0.5f 實現四捨五入。
- XML 中直接用
16dp、14sp,系統自動換算,無需手動轉換。