px,dp,sp三者的转换

dp是虚拟像素,在不同的像素密度的设备上会自动适配,

比如: 在320x480分辨率,

像素密度为160,1dp=1px 在480x800分辨率,像素密度为240,1dp=1.5px

计算公式:1dp*像素密度/160 = 实际像素数  

下面是工具类:

import android.util.TypedValue;   

import android.content.Context;   

//常用单位转换的辅助类   

public class DensityUtil{   

    public DensityUtil()   

    {   

        /* cannot be instantiated */   

        throw new UnsupportedOperationException("cannot be instantiated");   

    }   

   

    /** 

     * dp转px 

     *  

     * @param context 

     * @param val 

     * @return 

     */   

    public static int dp2px(Context context, float dpVal)   

    {   

        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,   

                dpVal, context.getResources().getDisplayMetrics());   

    }   

   

    /** 

     * sp转px 

     *  

     * @param context 

     * @param val 

     * @return 

     */   

    public static int sp2px(Context context, float spVal)   

    {   

        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,   

                spVal, context.getResources().getDisplayMetrics());   

    }   

   

    /** 

     * px转dp 

     *  

     * @param context 

     * @param pxVal 

     * @return 

     */   

    public static float px2dp(Context context, float pxVal)   

    {   

        final float scale = context.getResources().getDisplayMetrics().density;   

        return (pxVal / scale);   

    }   

   

    /** 

     * px转sp 

     *  

     * @param fontScale 

     * @param pxVal 

     * @return 

     */   

    public static float px2sp(Context context, float pxVal)   

    {   

        return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);   

    }   

   

}

原文地址:https://www.cnblogs.com/wgha/p/5756089.html