Android dp、px、sp相互转化工具类

正文

今天我编写一个dp、px、sp相互转化的工具类

我们在开发中有时候可能会有dp、px、sp相互的需求,首先我们来看看这三者的概念

px:它其实就是我们常说的像素单位,有时你可能会听到某屏幕是800*600的分辨率,这就是指的px
dp:这个是虽然也是尺寸单位,但是它会根据不同屏幕的密度进行适配,最开始Android是用的px,后来为了适配各种屏幕,于是就出现了dp,dp一般用于View大小设置
sp:它和dp一样,也是为了适配屏幕出现的,不过它一般是用于字体大小设置

既然我们要让它们能够互相转换,那必定会有一个桥梁,那这个桥梁是什么呢,通过上面的描述你应该也大概知道了,那就是屏幕的密度,那我们开发中怎么获取呢,下面我们就来看看它们之间如何进行转换

px转dip或dp

/**
 * px转dip或dp
 *
 * @param context
 * @param pxValue
 * @return
 */
public static int px2dip(Context context, float pxValue) {
    float scale = context.getResources().getDisplayMetrics().density;
    return (int) (pxValue / scale + 0.5f);
}

可以看到,px转换成dp先是通过获取scale,这个scale获取的代码是

context.getResources().getDisplayMetrics().density

也就是密度了,然后我们通过转换公式就可以得到dp了,下面的其他转换也类似,我们来看看

dip或dp转px

/**
 * dip或dp转px
 *
 * @param context
 * @param dipValue
 * @return
 */
public static int dip2px(Context context, float dipValue) {
    float scale = context.getResources().getDisplayMetrics().density;
    return (int) (dipValue * scale + 0.5f);
}

px转sp

/**
 * px转sp
 *
 * @param context
 * @param pxValue
 * @return
 */
public static int px2sp(Context context, float pxValue) {
    float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
    return (int) (pxValue / fontScale + 0.5f);
}

sp转px

/**
 * sp转px
 *
 * @param context
 * @param spValue
 * @return
 */
public static int sp2px(Context context, float spValue) {
    float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
    return (int) (spValue * fontScale + 0.5);
}

这样我们的转换就完成了,下面是这个工具类的完整代码

DisplayUtil.java

package com.yk.mchat.utils;

import android.content.Context;

public class DisplayUtil {

    /**
     * px转dip或dp
     *
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2dip(Context context, float pxValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * dip或dp转px
     *
     * @param context
     * @param dipValue
     * @return
     */
    public static int dip2px(Context context, float dipValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dipValue * scale + 0.5f);
    }

    /**
     * px转sp
     *
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2sp(Context context, float pxValue) {
        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (pxValue / fontScale + 0.5f);
    }

    /**
     * sp转px
     *
     * @param context
     * @param spValue
     * @return
     */
    public static int sp2px(Context context, float spValue) {
        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5);
    }

}

今天的内容就到这里。

    原文作者:JYangkai
    原文地址: https://www.jianshu.com/p/77f3e484de6f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞