Android中px,pt,dp,sp,dpi之间的区别以及联系

参考链接:http://greatverve.cnblogs.com/archive/2011/12/27/Android-dip-dp-sp-pt-px.html
http://ask.zol.com.cn/q/235769.html

px: pixel 像素,屏幕中可显示的最小单元。

pt: point 磅数 1磅等于 1/72英寸 ,一般pt都会作为字体的单位来使用(印刷行业使用)

dpi: density per inch 每英寸像素密度

dp: 也称作 dip density independent pixel 密度无关像素,它在不同像素密度的屏幕中的显示比例保持一致

sp: scaled pixels 是可伸缩像素的意思

dp,sp是可以根据手机的不同进行适配的。

具体如何适配 请看代码
代码来自http://greatverve.cnblogs.com/archive/2011/12/27/Android-dip-dp-sp-pt-px.html

度量单位的换算公式

在android源码包TypedValue.java中,我们看如下函数:
   public static float applyDimension(int unit, float value, DisplayMetrics metrics)
   {

        switch (unit) {

        case COMPLEX_UNIT_PX:

            return value;
            //如果要使用px则直接返回

        case COMPLEX_UNIT_DIP:

            return value * metrics.density;
            //如果要使用dip,也就是dp 则进行换算
            // metrics.density:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT; 
            //  DENSITY_DEFAULT 为 160

        case COMPLEX_UNIT_SP:

            return value * metrics.scaledDensity;
            //如果要使用sp 则进行换算
            //  metrics.scaledDensity:默认值为DENSITY_DEVICE / (float) DENSITY_DEFAULT;    


        case COMPLEX_UNIT_PT:

            return value * metrics.xdpi * (1.0f/72);

        case COMPLEX_UNIT_IN:

            return value * metrics.xdpi;
            //如果要使用 inch 英寸,则进行换算
            //metrics.xdpi:默认值为DENSITY_DEVICE;  为屏幕密度,不同手机数据不同

        case COMPLEX_UNIT_MM:

            return value * metrics.xdpi * (1.0f/25.4f);
            //如果要使用 mm 毫米,则进行换算
        }

        return 0;

    }

该函数功能:是把各单位换算为像素。

根据Android规定,在160dpi的屏幕上,1dp等于1px,而在320dpi的屏幕上,1dp等于2px。因此上面的函数都是根
据 metrics.density: 也就是 DENSITY_DEVICE / (float) DENSITY_DEFAULT; 也就是 DENSITY_DEVICE / 160
来计算的; 所以 设备的 DENSITY_DEVICE 不同 1dp对应的 px就不同。所以才可以在 不同设备屏幕上保持比例。

最后说一下

屏幕分辨率 和 屏幕密度 的区别

分辨率:是指屏幕图像的精密度,是指显示器所能显示的像素的多少。由于屏幕上的点,线和面都是由像素组成的,显示器可显示的像素越多,画面就越精细,同样的屏幕区域内能显示的信息也就越多,所以分辨率是个非常重要的性能指标之一。可以把整个图像想象成是一个大型的棋盘,而分辨率的表示方式就是所有经线和纬线交叉点的数目。

像素密度:即每英寸屏幕所拥有的像素数,像素密度越大,显示画面细节就越丰富。计算公式为像素密度={√(长度像素数^2+宽
度像素数^2)}/ 屏幕尺寸。注:屏幕尺寸单位为英寸 例:分辨率为1280*720 屏幕宽度为6英寸 计算所得像素密度约等于245

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值