美文网首页
关于dip dpi dp sp px 的那些事

关于dip dpi dp sp px 的那些事

作者: devYOUK | 来源:发表于2016-03-18 11:32 被阅读240次

    dip

    density independent pixel,可翻译成密度无关像素;
    也有device independent pixel,设备独立像素。

    密度无关,意味着不同屏幕密度下的dip值有相同的表现。
    dip曾经是Android开发布局时候的常用单位,但是现在已经被dp所取代(更简洁嘛)。

    dpi,ppi

    dots per inch,每英寸像素点。 本来是一个印刷行业的术语,dot原指打印的着墨点,在手机上就是像素点了。
    ppi: pixels per inch,是指像素(屏幕)密度。

    dpi, ppi 是一个设备常量,每个手机出厂的时候就确定了。 一般会选定某个dpi作为应用开发的锚点,或者说基线。
    网上有一些计算dpi或者ppi的公式,我个人觉得没什么用,在应用程序里完全不用计算,因为是设备常量,代码中是可以获取的。可以通过context.getResources().getDisplayMetrics().densityDpi获得。
    那手上有一台设备,不用代码怎么知道它的DPI呢?一般来讲PPI是几乎所有手机参数都会提及到的,那就找到设备的PPI,对比以下列表的值,向上找到最接近的DPI值,就是设备的DPI。

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

    如:设备的PPI是 401,那么往上找到最接近的DPI就是 480,同时也知道了这台设备的屏幕密度就是xxhdpi(该方法不完全正确,因为root过的手机可以修改手机的参数)

    sp

    scale pixel 缩放像素。 我个人觉得更好的理解是像素缩放倍数

    sp通常用于字体大小的设定。dp跟sp的区别在于,sp的值在一个设备上可以有不同表现。通过修改手机中的设置--显示--文字大小 可以变更sp的表现。

    px

    没啥好说的。

    px 与 dp 的转换关系

    px = dp * ( dpi / 160 )
    

    在一个 xxhdpi 的布局文件中,有个textView 的宽度为100dp,那显示时宽度将占用多少个像素?

    px = 100 * ( 480/160 ) = 300
    

    *BONUS 私货*

    代码层面,android绝大多数api都是使用px作为单位,只有在xml布局的时候才使用 dp,sp 。
    通常我们通过context.getResources().getDimension()方法获取的 dp,sp值 都会自动转成 px 单位。

    都说字体大小要用sp,有没有例外呢?

    当然有,sp值的表现是不稳定的,同一台设备的表现可以不同。
    在开发过程中,如果遇到布局比较紧凑,空间宽容度比较小的情况,应该使用dp(px)来设置大小,避免出现用户修改了系统文字大小而使界面兼容性下降,布局错乱的问题。

    同理

    如果你需要把图片当成文字一样处理的话,那就给图片的大小设置sp值

    相关文章

      网友评论

          本文标题:关于dip dpi dp sp px 的那些事

          本文链接:https://www.haomeiwen.com/subject/gaoclttx.html