当您需要为类似的像素设置像素值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);