zoukankan      html  css  js  c++  java
  • px、dp与sp的区别以及换算

    1、px

      即像素,1px代表屏幕上的一个物理像素点。

    2、dp

      dip:device independent pixels(设备独立像素),dp与dip一样,不同的设备有不同的显示效果,一般为了支持WVGA、HVGA和QVGA推荐使用这个,不依赖像素。

    3、sp

      sp:scale-independent pixels(缩放独立像素),与缩放无关的抽象像素,它和dp很相似,但唯一的区别在于,Android系统允许用户自定义文字尺寸大小(小,正常,大,超大等),当文字尺寸是“正常”时,1sp=1dp=0.00625inch(英寸),当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625inch

    4、dpi

      dpi:dots per inch(每英寸点数,或者说每英寸像素数目 更易懂),由设备决定,是写死的,可以通过context.getResources().getDisplayMetrics().densityDpi获取到。当然,也可以通过以下方法算出:

      dpi=横向分辨率/横向英寸数=纵向分辨率/纵向英寸数

    Google 规定的屏幕密度列表:

    • ldpi (low) ~120dpi
    • mdpi (medium) ~160dpi
    • hdpi (high) ~240dpi
    • xhdpi (extra-high) ~320dpi
    • xxhdpi (extra-extra-high) ~480dpi
    • xxxhdpi (extra-extra-extra-high) ~640dpi

    __________________________________________________________________________________

    dp与px

    px=dp*(dpi/160)

    dp=px/(dpi/160)

    sp与px

    px=sp*(dpi/160)

    sp=px/(dpi/160)

    _____________________________________________________________________________

    获取DisplayMetrics对象方法:

    DisplayMetrics dm=new DisplayMetrics();
    //获得DisplayMetrics对象方法一
    //dm=context.getResources().getDisplayMetrics();
    //获得DisplayMetrics对象方法二
    ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);

    px转其他单位代码:(该方法来自TypedValue)

    public static float applyDimension(int unit, float value,
       DisplayMetrics metrics)
       {
     switch (unit) {
     case COMPLEX_UNIT_PX:
         return value;
     case COMPLEX_UNIT_DIP:
         return value * metrics.density;
     case COMPLEX_UNIT_SP:
         return value * metrics.scaledDensity;
     case COMPLEX_UNIT_PT:
         return value * metrics.xdpi * (1.0f/72);
     case COMPLEX_UNIT_IN:
         return value * metrics.xdpi;
     case COMPLEX_UNIT_MM:
         return value * metrics.xdpi * (1.0f/25.4f);
     }
     return 0;
        }

     另外一种px转dp的代码:

    /** 
         * 根据手机的分辨率从 px(像素) 的单位 转成为 dp 
         */  
        public static int px2dip(Context context, float pxValue) {  
            final float scale = context.getResources().getDisplayMetrics().density;  
            return (int) (pxValue / scale + 0.5f);  
        }

    dp转px:

    /** 
         * 根据手机的分辨率从 dp 的单位 转成为 px(像素) 
         */  
        public static int dip2px(Context context, float dpValue) {  
            final float scale = context.getResources().getDisplayMetrics().density;  
            return (int) (dpValue * scale + 0.5f);  
        } 

    参考自:

     Supporting Multiple Screens

     Android中dip、dp、sp、pt和px的区别详解

     px 与 dp, sp换算公式?

     [Android问答] px、dp和sp,这些单位有什么区别?

     利用DisplayMetrics获取屏幕信息

      Android视觉规范-间距规范与文字规范单位换算(dip、sp与px)

  • 相关阅读:
    UITextField的总结
    【实战】登录界面
    点分治学习
    2020/3/1
    2020/2/29
    2020/2/28
    2020/2/27
    2020/2/27
    最小树形图
    Ch’s gift HDU6162
  • 原文地址:https://www.cnblogs.com/libertycode/p/5247421.html
Copyright © 2011-2022 走看看