# android dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

By [xiaoming.eth](https://paragraph.com/@xiaoming) · 2022-01-09

---

一、基本概念

dip ： Density independent pixels ，设备无关像素。 dp ：就是dip px ： 像素 dpi ：dots per inch ， 直接来说就是一英寸多少个像素点。常见取值 120，160，240。我一般称作像素密度，简称密度 density ： 直接翻译的话貌似叫 密度。常见取值 1.5 ， 1.0 。和标准dpi的比例（160px/inc） 分辨率 ： 横纵2个方向的像素点的数量，常见取值 480X800 ，320X480 屏幕尺寸： 屏幕对角线的长度。电脑电视同理。 屏幕比例的问题。因为只确定了对角线长，2边长度还不一定。所以有了4：3、16：9这种，这样就可以算出屏幕边长了。

二、工具类实现

    public class DensityUtils
    {
        private DensityUtils()
        {  
            /* 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);
        }

---

*Originally published on [xiaoming.eth](https://paragraph.com/@xiaoming/android-dpi-dip-px-density)*
