Android开发库VUtils之dp、sp转px

马欣德
2023-12-01

在android开发中,大部分情况下我们都用的dp值和sp值,这主要是用在xml文件中。但是很多时候我们需要在java代码中动态计算宽高、文字大小值,而这值是px值,这时我们需要将理想dp、sp值转成px值,以便于在更多的机型上能显示正常。
转换类:

package com.v.vutils.utils;

import android.content.Context;

/**
 * dp、sp 转换为 px 的工具类
 */
public class DisplayUtils {
    /**
     * @return 屏幕像素宽度,px类型
     */
    public static int getScreenWidth(Context context) {
        return context.getResources()
                .getDisplayMetrics().widthPixels;
    }

    /**
     * @return 屏幕像素高度,px类型
     */
    public static int getScreenHeight(Context context) {
        return context.getResources()
                .getDisplayMetrics().heightPixels;
    }

    /**
     * 将px值转换为dip或dp值,保证尺寸大小不变
     */
    public static float px2dip(Context context, float pxValue) {
        float scale = context.getResources()
                .getDisplayMetrics().density;
        return (pxValue / scale);
    }

    /**
     * 将dip或dp值转换为px值,保证尺寸大小不变
     */
    public static float dip2px(Context context, float dipValue) {
        float scale = context.getResources()
                .getDisplayMetrics().density;
        return (dipValue * scale);
    }

    /**
     * 将px值转换为sp值,保证文字大小不变
     */
    public static float px2sp(Context context, float pxValue) {
        float fontScale = context.getResources()
                .getDisplayMetrics().scaledDensity;
        return (pxValue / fontScale);
    }

    /**
     * 将sp值转换为px值,保证文字大小不变
     */
    public static float sp2px(Context context, float spValue) {
        float fontScale = context.getResources()
                .getDisplayMetrics().scaledDensity;
        return (spValue * fontScale);
    }


}

使用:

        // 20是需求的dp值
        int px = (int) DisplayUtils.dip2px(getBaseContext(), 20f);
 类似资料: