zoukankan      html  css  js  c++  java
  • Android 屏幕适配

    参考:

    参考:

    设计师给了px单位的标注,Android开发到底要设置多少dip,dp,sp

    名称 分辨率 屏幕密度
    QVGA 320*240 120
    WQVGA400 400*240 120
    WQVGA432 432*240 120
    HVGA 640*480 160
    WSVGA 1024*600 160
    WXGA800 1280*800 160
    WVGA800 800*480 240
    WVGA854 854*480 240
    WXGA720 1280*720 320

     

    DensityDpi 分辨率 屏幕密度 Density
    160dpi 320*533 mdpi 1
    240dpi 480*800 hdpi 1.5
    320dpi 720*1280 xhdpi 2
    480dpi 1080*1920 xxhdpi 3
    560dpi 1440*2560 xxxhdpi 3

     

     

     

     

     

     

    对于设计师给的设计图:

     一般给两个尺寸:

    一个640×960(i4),一个1334×750(i6)

     

    例如:

    选择GalaxyNexus作为开发的目标机型。
        该机型的屏幕尺寸是720x1280。设计师在720x1280的画布上进行设计。
        根据计算公式(px = (density / 160) dp),得知Galaxy Nexus上面,1dip=1dp=1sp=2px。所以对于40px的标注,开发需要给出20dip设置即可。

    注意:density值表示每英寸有多少个显示点(*) 

    屏幕适配方法:

    (1) 第一种思路:

    一种思路,就是在aplication里初始化一下美工出的图的比例 比如 1280X720 然后按照比例 每个activity里先获取到root view,然后递归运算子view缩放的。

    (2) 第二种思路:

    我的适配方法,直接根据美工的设计图来算就可以,如果1080p的设计图,把标注px除以3即为dp值,如果是720p设计图就除以2就行了,ps这里的3和2就是Density。就是这么简单,基本没有适配问题。

    注意:density值表示每英寸有多少个显示点(*) 

    (3) 对于如果有些机型的分辨率在value文件夹没有找到正好匹配的问题。
    根据android设配匹配规则,没有匹配,就会使用默认的value文件夹下的。
    例如:我们以1280x720的机型做为基准机,以屏幕的宽度为例,分为720份,也就是x1=1px. 我们可以在value文件夹中配置x1=0.5dp (因为1280x720的机子dpi大都在240dpi-320dpi之间,也就是1dp=2px)。 
    这时, 如果真的有比较奇葩的分辨率匹配不上,以Ipone-5为例1134x640,那现在没有匹配上。
    比如有个button,我们给了高度x50。那么他本来显示的高度是多少呢? 根据楼主的计算方式: 1134/1280*50=44px.
    那么以android的计算规则,ipone-5的dpi是多少呢(首先明确一点,android的dpi之前按照区间进行取值,也就说就是个相对值)? =341像素/英寸 。 那他的density也会取2. 也就是说1dp=2px.。
    那之后的流程就是,没有匹配上,找到默认的文件夹x50,发现文件夹中的值为25dp. 进行dp和px的转换后显示(25x2=50),也就是显示50px. (ˇˍˇ) 差4px. 左右。 
    我能说这个和我们使用dp进行适配的误差其实是一样的吗!!!
    所以解决方案就是:可以使用选择主流分辨率,设置dp为单位的默认value文件,如果分辨率没有匹配时显示有误差,其实这个问题也不是啥大问题。。

  • 相关阅读:
    操作系统知识点_用户编程接口
    操作系统知识点_内存管理
    操作系统知识点_进程管理
    LintCode 二叉树的后序遍历
    LintCode 二叉树的最大深度
    LintCode 二叉树的中序遍历
    LintCode 二叉树的前序遍历
    LintCode 删除排序链表中的重复元素
    Lintcode 二分查找
    lintcode 空格替换
  • 原文地址:https://www.cnblogs.com/CharlesGrant/p/4991146.html
Copyright © 2011-2022 走看看