美文网首页
Android 屏幕适配易混淆基础知识

Android 屏幕适配易混淆基础知识

作者: Jowney | 来源:发表于2019-02-12 11:44 被阅读13次

    一.基本概念
    dpi:dots per inch , 说白了就是一英寸有多少个像素点。常见取值 120,160,240。我一般称作像素密度,简称密度

    dip:Density independent pixels ,设备独立像素 — 这个和设备硬件有关,一般我们为了支持手机上多种分辨率,如WVGA、HVGA和QVGA,都会使用dip作为长度的单位

    dp:与dip完全相同,只是名字不同而已。在早期的Android版本里多使用dip,后来为了与sp统一就建议使用dp这个名字了。

    px:屏幕的像素点,简称像素

    sp:与缩放无关的抽象像素(Scale-independent Pixel)。sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。(建议使用sp作为文本的单位,其它用dp)

    density:直接翻译的话貌似叫 密度。常见取值 1.5 , 1.0 。和标准dpi的比例(160px/inc)
    ** 分辨率 **:横纵两个方向像素点的数量,例如480x800,1920x1080
    ** 屏幕尺寸 **:我们生活中经常听到手机5英寸,4.5英寸。电脑23.8英寸。它的结果是按照屏幕的对角线计算出来的,1英寸=2.5400 厘米,也就是说,5英寸=12.7厘米

    屏幕比例的问题:因为只确定了对角线长,2边长度还不一定。所以有了4:3、16:9这种,这样就可以算出屏幕边长了。

    二.应用

    在Android里面,获取一个窗口的metrics,里面有这么几个值

    metrics.density;  
       metrics.densityDpi;

    densityDpi:就是像素密度(dpi)

    density: 其实是 DPI / (160像素/英寸) 后得到的值。从基本概念就看得出了,DPI本身的单位也是 像素/英寸,所以density其实是没单位的,它就是一个比例值。而dpi的单位是 像素/英寸,比较符合物理上面的密度定义,密度不都是单位度量的值么,为了防止混淆,dpi叫像素密度,简称密度,density就叫density。(注:density值表示每英寸有多少个显示点,与分辨率是两个概念)

    三.单位互相转换

    1.计算dpi
    例如有一台手机,屏幕4寸,分辨率480X800,它的dpi如何算呢?
    因为不知道边长,肯定不能分开算,4是对角线长度,那直接用勾股定理算对角线像素,除以4,算出来大概是 dpi = 233 像素/英寸。
    那么density就是 (233 px/inch)/(160 px/inch)=1.46 左右
    顺便说下,android默认的只有3个dpi,low、medium和high,对应 120、160、240,如果没有特别设置,所有的dpi都会被算成这3个,其中default的为160.

    1. 计算 dp 与 px
        我们写布局的时候,肯定还是要知道1个dp到底有多少px的。
        换算公式如下: dp = (DPI/(160像素/英寸))px = density px
        注意,这里都是带单位的。px是单位,dp是单位,density没单位。
        为了方便,假设dpi是240 像素/英寸 , 那么density就是1.5
        那么就是 dp=1.5px ,注意这是带了单位的,也就是 设备无关像素 = density 像素
        那么转换为数值计算的话,应该是下面这个式子
        PX = density * DP

    ** 也就是:像素值 = density * 设备无关像素值 ,�请注意这里有个值字 **

    1. 为啥 标准dpi = 160
        (1)Android Design [1] 里把主流设备的 dpi 归成了四个档次,120 dpi、160 dpi、240 dpi、320 dpi
        实际开发当中,我们经常需要对这几个尺寸进行相互转换(比如先在某个分辨率下完成设计,然后缩放到其他尺寸微调后输出),一般按照 dpi 之间的比例即 2:1.5:1:0.75   来给界面中的元素来进行尺寸定义。
        也就是说如果以 160 dpi 作为基准的话,只要尺寸的 DP 是 4 的公倍数,XHDPI 下乘以 2,HDPI 下乘以 1.5,LDPI 下乘以 0.75 即可满足所有尺寸下都是整数 pixel 。
        但假设以 240 dpi 作为标准,那需要 DP 是 3 的公倍数,XHDPI 下乘以 1.333,MDPI 下乘以 0.666 ,LDPI 下除以 2
        而以 LDPI 和 XHDPI 为基准就更复杂了,所以选择 160 dpi
      (2)这个在Google的官方文档中有给出了解释,因为第一款Android设备(HTC的T-Mobile G1)是属于160dpi的。

    相关文章

      网友评论

          本文标题:Android 屏幕适配易混淆基础知识

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