Android 将dp和sp转换为像素

示例

当您需要为类似的像素设置像素值Paint.setTextSize但仍希望根据设备缩放像素值时,可以转换dp和sp值。

DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12f, metrics);

DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12f, metrics);

另外,如果您有上下文可以从中加载资源,则可以将尺寸资源转换为像素。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="size_in_sp">12sp</dimen>
    <dimen name="size_in_dp">12dp</dimen>
</resources>

// 获取资源指定的确切尺寸
float pixels = context.getResources().getDimension(R.dimen.size_in_sp);
float pixels = context.getResources().getDimension(R.dimen.size_in_dp);

// 获取资源指定的尺寸以用作尺寸。
// 该值四舍五入到最接近的整数,但至少为1px。
int pixels = context.getResources().getDimensionPixelSize(R.dimen.size_in_sp);
int pixels = context.getResources().getDimensionPixelSize(R.dimen.size_in_dp);

// 获取资源指定的尺寸以用作偏移量。
// 该值将四舍五入为最接近的整数,并且可以为0px。
int pixels = context.getResources().getDimensionPixelOffset(R.dimen.size_in_sp);
int pixels = context.getResources().getDimensionPixelOffset(R.dimen.size_in_dp);