精华内容
下载资源
问答
  • /** * 单位转换工具 * * @author carrey * */ public class DisplayUtil { /** * 将px值转换为dip或dp值,保证尺寸大小不变 * * @param pxValue
    
        /** 
         * 单位转换工具 
         *  
         * @author carrey 
         *  
         */  
        public class DisplayUtil {  
            /** 
             * 将px值转换为dip或dp值,保证尺寸大小不变 
             *  
             * @param pxValue 
             * @param scale 
             *            (DisplayMetrics类中属性density) 
             * @return 
             */  
            public static int px2dip(float pxValue, float scale) {  
                return (int) (pxValue / scale + 0.5f);  
            }  
          
            /** 
             * 将dip或dp值转换为px值,保证尺寸大小不变 
             *  
             * @param dipValue 
             * @param scale 
             *            (DisplayMetrics类中属性density) 
             * @return 
             */  
            public static int dip2px(float dipValue, float scale) {  
                return (int) (dipValue * scale + 0.5f);  
            }  
          
            /** 
             * 将px值转换为sp值,保证文字大小不变 
             *  
             * @param pxValue 
             * @param fontScale 
             *            (DisplayMetrics类中属性scaledDensity) 
             * @return 
             */  
            public static int px2sp(float pxValue, float fontScale) {  
                return (int) (pxValue / fontScale + 0.5f);  
            }  
          
            /** 
             * 将sp值转换为px值,保证文字大小不变 
             *  
             * @param spValue 
             * @param fontScale 
             *            (DisplayMetrics类中属性scaledDensity) 
             * @return 
             */  
            public static int sp2px(float spValue, float fontScale) {  
                return (int) (spValue * fontScale + 0.5f);  
            }  
        }  




    获取密度比例方法


    static public float getScreenDensity(Context context) {
        try {
            DisplayMetrics dm = new DisplayMetrics();
    
            ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay()
                    .getMetrics(dm);
            return dm.density;
        } catch (Exception e) {
            return DisplayMetrics.DENSITY_DEFAULT;
        }
    }



    //获取屏幕密度

     getResources().getDisplayMetrics().densityDpi


     

    原理解释:

    ppi的运算方式是:

    PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数

    dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,

    dp和px的换算公式 :
    dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。

     

    sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。

    sp 与 px 的换算公式:sp*ppi/160 = px

    为什么是160原因: 谷歌做标准 我个人觉得好算吧.以前好像还是140是因为以前手机屏幕小

    也就是说

    dm.density=getResources().getDisplayMetrics().densityDpi/160

    至于为什么要加0.5
    
    (dipValue * scale + 0.5f)
    (以下博文转载http://blog.csdn.net/changcsw/article/details/52440543)

    这两个公式网上很多,但为什么 最后都要加上0.5f 呢?

     按正常的推理应该是  dip = pxValue / scale 和 px = dipValue * scale ,

    实际上准确的值就应该是 咱们推理出来的,之所以后面加上0.5f是因为 咱们要的只不是那么精准,根据推理算出来的是个浮点数,而咱们程序中一般使用int类型就够了,这里涉及到一个类型转换精准度问题,熟悉Java特效的同学应该知道

    float 类型的 4.1 和4.9 强转成int类型后,会失去精准度变成 int类型的4, 而如果咱们想四舍五入的话,把他们都加上0.5f,这样转换出来的结果就是:

    4.4 + 0.5 = 4.9 转为int 还是4,而4.5 + 0.5 = 5.0 转换成int后就是5,正好是四舍五入,这样就保证了咱们算出来的值相对精准。

    展开全文
  • 屏幕适配,px和dp, sp换算公式

    千次阅读 2015-10-21 22:16:46
    换算公式: PPI =(长度像素数² + 宽度像素数²) / 屏幕对角...需要熟悉px,dp和sp这些换算公式以及做屏幕适配,我们要需要清楚以下几个概念:   px: 是英文单词pixel的缩写,意为像素,屏幕上的点。我们通常所说的分
    
    

    换算公式:

    ppi = (长度像素数² + 宽度像素数²) / 屏幕对角线英寸数

    px = dp*ppi/160
    dp = px / (ppi / 160)

    sp = px / (ppi / 160)


    需要熟悉px,dp和sp这些换算公式以及做屏幕适配,我们要需要清楚以下几个概念:

        px: 是英文单词pixel的缩写,意为像素,屏幕上的点。我们通常所说的分辨率如480X800就是指的像素。在设计领域中,像素是用来计算数码影像的最小单位。计算机中显示的图像并非连续的线条组成,而是由许多肉眼看不见的小点组成。如果把影像放大数倍,会发现这些连续色调其实是由许多色彩相近的小点所组成,这些小点就是构成影像的最小单位“像素”。由于是最小的独立显示单位,px均为整数,不会出现0.5px的情况。

        dp: 也即dip,设备独立像素(虚拟像素),device independent pixels的缩写,在不同的像素密度的设备上会自动适配,是Android特有的单位,比如:

        在320x480分辨率,像素密度为160,1dp=1px
         在480x800分辨率,像素密度为240,1dp=1.5px
         计算公式:1dp*像素密度/160 = 实际像素数 

        sp: 和dp很类似,一般用来设置字体大小,和dp的区别是它可以根据字体大小偏好进行缩放。

        dpi:  是Dots Per Inch的缩写,每英寸点数,即每英寸包含像素个数。比如320X480分辨率的手机,宽2英寸,高3英寸,每英寸包含的像素点的数量为320/2=160dpi(横向)或480/3=160dpi(纵向),160就是这部手机的dpi,横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。

        ppi(density):是Pixels per inch缩写,每英寸所拥有的像素数目,即 "像素密度",density和dpi的关系为 density = dpi/160

        weight:是权重的意思,weight所计算出来的宽度=原来宽度+剩余空间所占百分比的宽度;例如:宽度=n

            Button1: width:matchparent , height:0dp , weight:1    1/3n=0+1/3n

            Button2: width:matchparent , height:0dp , weight:2

            如果Button1,height: width:matchparent , 2/3n=n+(n-2n)*1/3 

    drawable- mdpi、drawable- hdpi、drawable-xhdpi、drawable-xxhdpi、drawable-xxxhdpi的区别:

    (1)drawable-mdpi    size=48*48    160dpi    density=1

    (2)drawable-hdpi    size=72*72    240dpi    density=1.5

    (3)drawable-xhdpi    size=96*96   320dpi    density=2

    (4)drawable-xxhdpi    size=144*144    480dpi    density=3

    (5)drawable-xxxhdpi    size=192*192    640dpi    density=4

    Android系统有自动渲染机制,会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片;在设计图标时,对于以上五种主流像素密度,应按照2:3:4:6:8的比例进行缩放;例如:一个图标尺寸为48*48dp,这表示在mdpi屏幕上的实际尺寸是48*48px,而在hdpi屏幕上是实际大小的1.5倍(像素密度/160=实际像素),72*72px,在xhdpi上是实际大小的2倍(96*96px),以此类推.

    >>限定符:Android3.2之后使用res/layout/main.xml和res/layout-sw600dp/main.xml对平板进行适配(sw: SmallWidth)

    >>别名布局:(3.2之前需要在layout-large和layout-sw600dp放同一个xml文件,别名布局可以只放置一个就可以)

    res/layout/main1.xml    布局1

    res/layout/main2.xml    布局2

    3.2之前布局res/values-large/layouts.xml:

    <resource>

        <item name="main" type="layout"> @layout/main1</item>

    </resource>

    3.2之后布局res/values-sw600dp/layouts.xml:

    <resource>

        <item name="main" type="layout"> @layout/main2</item>

    </resource>

    方向布局:

    res/values-sw600dp-land/layouts.xml:横向

    <resource>

        <item name="main" type="layout"> @layout/main1</item>

    </resource>

    res/values-sw600dp-port/layouts.xml:竖直

    <resource>

        <item name="main" type="layout"> @layout/main2</item>

    </resource>

    >>针对屏幕宽度不一致适配: 建立多种分辨率values文件夹,建立dimens.xml,layout中引用dimens中的宽高




    展开全文
  • Android dp sp px换算

    2018-03-27 14:44:10
    dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,dp和px的换算公式 :dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。 sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当...
    • dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,dp和px的换算公式 :
      dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。
      
    • sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。
      sp 与 px 的换算公式:sp*ppi/160 = px
    展开全文
  • dp sp px换算代码

    2015-08-17 15:08:44
    dp(dip): device independent ...dp也就是dip,这个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度

    dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
    dp也就是dip,这个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度为160,这时dp和sp和px是一 样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度 设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动 将width属性值设置成320px的。也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。
    px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
    pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
    sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。

    “`
    dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
    dp也就是dip,这个和sp基本类似。如果设置表示长度、高度等属性时可以使用dp 或sp。但如果设置字体,需要使用sp。dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度为160,这时dp和sp和px是一 样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度 设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动 将width属性值设置成320px的。也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。
    px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
    pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
    sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。

    转换代码如下

    [java] view plaincopy

    /**
     * dp、sp 转换为 px 的工具类
     * 
     * @author fxsky 2012.11.12
     *
     */ 
    public class DisplayUtil { 
        /**
         * 将px值转换为dip或dp值,保证尺寸大小不变
         * 
         * @param pxValue
         * @param scale
         *            (DisplayMetrics类中属性density)
         * @return
         */ 
        public static int px2dip(Context context, float pxValue) { 
            final float scale = context.getResources().getDisplayMetrics().density; 
            return (int) (pxValue / scale + 0.5f); 
        } 
    
        /**
         * 将dip或dp值转换为px值,保证尺寸大小不变
         * 
         * @param dipValue
         * @param scale
         *            (DisplayMetrics类中属性density)
         * @return
         */ 
        public static int dip2px(Context context, float dipValue) { 
            final float scale = context.getResources().getDisplayMetrics().density; 
            return (int) (dipValue * scale + 0.5f); 
        } 
    
        /**
         * 将px值转换为sp值,保证文字大小不变
         * 
         * @param pxValue
         * @param fontScale
         *            (DisplayMetrics类中属性scaledDensity)
         * @return
         */ 
        public static int px2sp(Context context, float pxValue) { 
            final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; 
            return (int) (pxValue / fontScale + 0.5f); 
        } 
    
        /**
         * 将sp值转换为px值,保证文字大小不变
         * 
         * @param spValue
         * @param fontScale
         *            (DisplayMetrics类中属性scaledDensity)
         * @return
         */ 
        public static int sp2px(Context context, float spValue) { 
            final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; 
            return (int) (spValue * fontScale + 0.5f); 
        } ```
    

    以下是另一篇写的很详细的博客,借以参考,原文地址

    PPI = Pixels per inch,每英寸上的像素数,即 “像素密度”

    xhdpi: 2.0
    hdpi: 1.5
    mdpi: 1.0 (baseline)
    ldpi: 0.75

    drawable-ldpi、drawable-mdpi、drawable-hdpi 精度分别为低、中(android默认)、高。
    对应的图片大小为:36x36、48x48、72x72。

    xxhdpi: 144*144
    xhdpi:96*96
    hdpi:72*72
    mdpi:48*48
    ldpi:36*36

    dp是虚拟像素,在不同的像素密度的设备上会自动适配,比如:
    在320x480分辨率,像素密度为160,1dp=1px
    在480x800分辨率,像素密度为240,1dp=1.5px
    计算公式:1dp*像素密度/160 = 实际像素数

    drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:
    (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
    (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
    (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
    系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。

    ppi的运算方式是:

    PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数

    dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,

    dp和px的换算公式 :
    dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。

    sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。

    sp 与 px 的换算公式:sp*ppi/160 = px

    总结得出:

    px = dp*ppi/160
    dp = px / (ppi / 160)

    px = sp*ppi/160
    sp = px / (ppi / 160)

    dp = sp?

    展开全文
  • PX、DP和SP之间的换算

    2017-06-29 18:22:41
    在Android开发中,尺寸换算可以说既简单又复杂,而且还比较碎,特别是屏幕适配的时候肯定会用到他们。今天就来总结一下他们三者的关系,首先说下他们都是什么。px:像素单位。最基础的图像构成元素单位 dp:与密度...
  • 首先先区分下xp sp dp dip ,这个很多地方都有讲。dip: device independent pixels(设备独立像素).不同设备有不同的显示效果,这个设备硬件有关,一般我们为了支持WVGA、HVGAQVGA 推荐使用这个,不依赖像素。dp: ...
  • Android设备 xp sp dp dip 的换算和理解

    千次阅读 2013-05-23 15:14:09
    首先先区分下xp sp dp dip ,这个很多地方都有讲。  dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个设备硬件有关,一般我们为了支持WVGA、HVGAQVGA 推荐使用这个,不依赖像素...
  • 做android开发的人都知道,在切图上跟UI设计师讨论dp/sp跟px的关系时都是很心累的。
  • 比如UI设计师给的图是以750px的屏幕宽度作为标准的,例如一张图片的尺寸是100px*100px,或者字体大小为100px,则换算成android的dp和sp为(以xxhdpi屏为常用适配机型 rate = 320/160~480/160=2~3):(1080/750)*100/...
  • 1、px  即像素,1px代表屏幕上的一个物理像素点。 2、dp  dip:device independent pixels(设备独立像素),dp... sp:scale-independent pixels(缩放独立像素),与缩放无关的抽象像素,它和dp很相似,但唯...
  • dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个设备硬件有关,一般我们为了支持WVGA、HVGAQVGA 推荐使用这个,不依赖像素。 注:Android中,dp是Density-independent
  • 首先先区分下xp sp dp dip ,这个很多地方都有讲。  dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个设备硬件有关,一般我们为了支持WVGA、HVGAQVGA 推荐使用这个,不依赖...
  • 1、px 即像素,1px代表屏幕上的一个...设计中的像素实际显示屏上的像素相对应。 屏幕的分辨率一般就描述为“宽向像素数X纵向像素数”。比如 Android手机常见的分辨率有:320 X 480, 480 X 800, 1080 X 1920等...
  • 根据网络资源归纳总结而成。 在刚接触Android的xml布局文件的时候,我们首先会遇到的一个问题就是各种单位的定义以及他们之间的换算:px, dp和sp
  • px :是屏幕的像素点 in :英寸 mm :毫米 ...sp :同dp相似,但还会根据用户的字体大小偏好来缩放。 建议使用sp作为文本的单位,其它用dip 针对dippx 的关系,做以下概述: QVGA屏density=1
  • 在实际开发过程中有很多人不太理解 dp、sp 和 px 的区别:先介绍一下 dp 和spdp 也就是 dip。这个和 sp 基本类似。如果设置表示长度、高度等属性时可以使用 dp 或 sp。但如果设置字体,需要使用 sp。dp 是与密度...
  • 在写代码或者开发过程中有很多人不太理解 dp、sp 和 px 的区别:现在这里介绍一下 dp 和spdp 也就是 dip。这个和 sp 基本类似。如果设置表示长度、高度等属性时可以使用 dp 或 sp。但如果设置字体,需要使用 sp。...
  • px :是屏幕的像素点 in :英寸 mm :毫米 ...sp :同dp相似,但还会根据用户的字体大小偏好来缩放。 建议使用sp作为文本的单位,其它用dip 针对dippx 的关系,做以下概述: QVGA屏density=1
  • 屏幕像素密度(ppi)计算:ppi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数;...dp与px换算: px = dp*ppi/160 dp = px / (ppi / 160) sp与px换算 px = sp*ppi/160 sp = px / (ppi / 160) 现在市
  • 目录结构目录结构 前言 度量单位含义 换算规则前言在分辨率没有牛逼到爆的过去,程序员通常以像素为单位设计计算机用户界面。例如,图片大小为80×32像素。这样处理的问题在于,如果在一个每... Android支持dpsp、p
  • 显示单位pxdip以及sp的区别 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个设备硬件有关,一般我们为了支持WVGA、HVGAQVGA 推荐使用这个,不依赖像素。 px: pixels...

空空如也

空空如也

1 2 3 4 5 6
收藏数 114
精华内容 45
关键字:

dp和sp换算