转载请注明出处(http://www.cnblogs.com/weizhxa/p/7568090.html )

有不正确,还请大家留言修正!

1、何谓屏幕适配:在任何设备上看起来布局都是近似的,细分也就是控件的比例是基本一致的。由于我们在定义控件的尺寸时一般使用的是dp和sp,所以最终也就是求不同设备上dp和sp的比例。
2、屏幕适配做法:
  2.1 总结

    2.1.1 根据像素密度进行屏幕适配:目前需要适配的像素密度一般为hdpi、xhdpi、xxhdpi、xxxhdpi;所以先在res文件夹下创建vaelus-hdpi、values-xhdpi、values-xxhdpi、values-xxxhdpi文件夹,并在各文件夹下建立dimen.xml文件;
    2.1.2 根据美工所给图确定对应的像素密度(像素密度计算公式:像素密度=√{(长度像素数^2+宽度像素数^2)}/屏幕尺寸,一般美工给图为720p或者1080p,则对应的像素密度一般归为360dpi或者480dpi,即xhdpi和xxhdpi),用给定图中的px尺寸计算美工图所表示的dp尺寸(例如1280x720的美工图中,在图中一个控件的宽为96px,则1dp=2px[dp与px的换算公式如下所示,原理请百度],在values-xhdpi的dimen.xml文件中就可以标注此控件的大小为48dp);如果是文字,同样可以换算为dp(或者sp,sp有缺点,在2.1.4讲述。),换算公式同控件。

          2560x1440    1920x1080  1280x720  800x480
           xxxhdpi      xxhdpi      xhdpi    hdpi
     1dp  =          4           3         2        1.5             px
    2.1.3 将其它res文件尺寸通过比例关系进行计算,实现尺寸文件;
      dp以及sp在不同资源尺寸下的转换公式:
      2560x1440  1920x1080  1280x720  800x480
       xxxhdpi         xxhdpi          xhdpi            hdpi
   dp 宽        1        1       1      5/6=0.833
     高   1        1       1      8/9=0.889
   sp 宽        1        1       1      5/6=0.833
     高   1        1       1      8/9=0.889

sp取中间值    1                        1                       1                0.85 
    注释:上表意为:如果美工给了我们1280x720p的图,那么我们在进行尺寸定义时,xxxhdpi、xxhdpi、xhdpi下的dp和sp尺寸都是一致的,hdpi下的尺寸dp的宽需要  *0.833,高需要*0.889,sp需要*0.85,即可获得hdpi下的尺寸文件。

  2.1.4 文字使用sp的问题:如果文字使用sp,则当系统字体改变大小时(例如从超大改为标准),字体会跟着变化,我们可以使用dp来消除这种现象。
2.2 分析
  2.2.1 首先确定屏幕支持类型,目前一般支持hdpi、xhdpi、xxhdpi、xxxhdpi即可;
  2.2.2 根据美工给的图来进行基础作业:美工一般可以给xhdpi或者xxhdpi的图,也就是720或者1080p的图;将美工做的图所标px尺寸换算为dp尺寸,换算公式是xhdpi的px/2,xxhdpi的尺寸PX/3,实现所有页面时的尺寸和文字大小全部放入res的dimen文件夹中;
          2560x1440    1920x1080  1280x720  800x480
           xxxhdpi      xxhdpi      xhpid     hdpi
     1dp  =          4           3         2        1.5             px
  2.2.3 补齐hdpi、xhdpi、xxhdpi、xxxhdpi下的尺寸文件大小。换算公式如下(注:此公式以1080p或者720p为单位计算):最后在手机上就反应出来控件在任何手机上的宽和高都看起来是比例一样的。
    dp比例算法:
    dp:将某一尺寸下的数据换算为别的数据公式:
    例如美工给图中,设备尺寸为宽d,高e,单位为px,px与dp换算关系为f,某控件宽为x、高为y, 单位为px,则在其它尺寸中,假设目标尺寸设备宽为a,高为b,单位为px,px与dp换算关系为c,假设此控件在此设备的宽为x1、高为y1, 单位为px;
    则美工给图的尺寸换算为dp为:
    源dp:
      宽[dp] k = x/f 宽[百分比] = x/d x=kf
      高[dp] l = y/f 高[百分比] = y/e y=lf
    目标dp:
      宽[dp] = x1/c 宽[百分比] = x1/a
      高[dp] = y1/c 高[百分比] = y1/b
    为了达到屏幕适配的目的(控件展现效果一致,即宽高基本一致),则有:
      x/d = x1/a , y/e=y1/b
      则x1 = ax/d , y1 = by/e
      则目标dp:
      宽[dp] = x1/c = ax/cd
      高[dp] = y1/c = by/ce
    则目标dp与源dp的换算公式为(k和l分别代表源dp的宽和高):
    目标dp:
      宽[dp] = ax/cd = akf/cd = k * (af/cd)
      高[dp] = by/ce = blf/ce = l * (bf/ce)
    带入abcdef则:目标控件的高宽分别为源高宽的:
      dp转换公式:
      源设备    b     a    c    目标设备       e       d       f    宽        高
      xxxhdpi: 2560    1440    4   xxhdpi   1920    1080    3    1    1
                           xhdpi    1280    720      2    1         1
                        hdpi    800      480     1.5    1.2       1.125
      xxhdpi    1920    1080    3    xxxhdpi:  2560    1440    4    1    1
                        xhdpi    1280     720      2    1    1
                         hdpi    800     480     1.5     1.2   1.125
      xhdpi    1280    720     2    xxxhdpi:  2560    1440    4     1    1
                        xxhdpi   1920    1080    3    1    1
                        hdpi     800      480     1.5     1.2     1.125
      hdpi       800     480    1.5   xxxhdpi: 2560    1440    4   0.833    0.889
                        xxhdpi     1920    1080     3     0.833    0.889
                        xhdpi    1280     720      2   0.833    0.889
      所以:基于1080p或者720p的图,计算dp后,直接可用于xxxhdpi、xxhdpi、xhdpi,除以1.2和1.125后分别用于hdpi的高和宽。

    sp转换算法公式:
    首先我们需要明白sp和px怎么转化:
      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?

      所以我们由上面的dp资源文件比例公式表可以得出结论:
        sp在不同资源尺寸下的dimen转换公式:
        2560x1440  1920x1080  1280x720  800x480
        xxxhdpi      xxhdpi     xhdpi      hdpi
     sp 宽       1         1          1        5/6=0.833
       高    1         1      1       8/9=0.889
      整体    1         1      1       8/9=0.889
      实践证明:xxxhdpi、xxhdpi、xhdpi的sp是1:1:1的,但是从这3者转到hdpi时用0.833还是0.889呢?其实取哪一个都是可以的,可以取个中间值0.85就可以了。

一篇不一样的Android屏幕适配具体做法(原创)的更多相关文章

  1. Android 屏幕适配(一)百分比布局库(percent-support-lib) 解析与扩展

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/46695347: 本文出自:[张鸿洋的博客] 一.概述 周末游戏打得过猛,于是周 ...

  2. 【收藏】Android屏幕适配全攻略(最权威的Google官方适配指导)

    来源:http://blog.csdn.net/zhaokaiqiang1992 更多:Android AutoLayout全新的适配方式, 堪称适配终结者 Android的屏幕适配一直以来都在折磨着 ...

  3. Android屏幕适配全攻略(最权威的官方适配指导)(转),共大家分享。

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  4. 【转】Android屏幕适配全攻略(最权威的官方适配指导)

    原文网址:http://blog.csdn.net/jdsjlzx/article/details/45891551 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的 ...

  5. Android屏幕适配全攻略(最权威的官方适配指导)

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入 ...

  6. Android 屏幕适配:最全面的解决方案

    转自:https://www.jianshu.com/p/ec5a1a30694b 前言 Android的屏幕适配一直以来都在折磨着我们Android开发者,本文将结合: Google的官方权威适配文 ...

  7. Android 一种非常好用的Android屏幕适配

    前言 网上关于屏幕适配的文章已经铺天盖地了,为什么我还要讲?因为网上现在基本都是使用px适配,即每种屏幕分辨率的设备需要定义一套dimens.xml文件.再加上有些手机还有虚拟按键(例如华为),这样就 ...

  8. 好用的Android屏幕适配

    前言 网上关于屏幕适配的文章已经铺天盖地了,为什么还要讲?因为网上现在基本都是使用px适配,即每种屏幕分辨率的设备需要定义一套dimens.xml文件.再加上有些手机还有虚拟按键(例如华为),这样就还 ...

  9. Android屏幕适配全攻略(最权威的官方适配指导)屏幕尺寸 屏幕分辨率 屏幕像素密度 dpdipdpisppx mdpihdpixdpixxdpi

    Android屏幕适配全攻略(最权威的官方适配指导)原创赵凯强 发布于2015-05-19 11:34:17 阅读数 153734 收藏展开 转载请注明出处:http://blog.csdn.net/ ...

随机推荐

  1. Vue项目中导入excel文件读取成js数组

    1. 安装组件 cnpm install xlsx --save 2. 代码 <template> <span> <input class="input-fil ...

  2. Python--前端基础之JavaScript(JS的引入方式,JS的变量、常量和标识符,JS的数据类型,运算符,流程控制,JavaScript的对象)

    JavaScript介绍 JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互. JavaScript是浏览器解释执行的,前端脚 ...

  3. ofbiz:找不到org.ofbiz.widget.ContentWorkerInterface的类文件

    ofbiz编译报错: 找不到org.ofbiz.widget.DataResourceWorkerInterface的类文件 找不到org.ofbiz.widget.ContentWorkerInte ...

  4. GPIO软件模拟IIC时序

    一.MPU6050中的IIC时序 1.1 START和STOP SDA和SCL在高电平时,SDA拉低表示START.SCL拉低,表示可以传输数据. SDA和SCL在低电平时,SDA拉高表示STOP. ...

  5. 【LeetCode 36】有效的数独

    题目链接 [题解] 就一傻逼模拟题 [代码] class Solution { public: bool isValidSudoku(vector<vector<char>>& ...

  6. BZOJ 3622: 已经没有什么好害怕的了(二项式反演)

    传送门 解题思路 首先将\(a\),\(b\)排序,然后可以算出\(t(i)\),表示\(a(i)\)比多少个\(b(i)\)大,根据容斥套路,设\(f(k)\)表示恰好有\(k\)个\(a(i)\) ...

  7. AcWing 229. 新NIM游戏 (线性基+博弈论)打卡

    题目:https://www.acwing.com/problem/content/description/231/ 题意:给出n堆石子,然后第一回合,A玩家可以随便拿多少堆石子,第二回合B玩家随便拿 ...

  8. 服务器一般达到多少QPS比较好?

    每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量. 原理:每天80%的访问集中在20%的时间里,这20%时 ...

  9. 修改Tomcat的server.xml之后,tomcat 部署项目报错:Removing obsolete files from server... Could not clean server of obsolete files: null java.lang.NullPointerException

    介个是你在clean tomcat的时候 文件没有clean清.(临时崩溃 系统宕机或其他原因)导致自己eclipse里的service.xml 在clean时没有copy一致. 解决方案: 1找到你 ...

  10. Toast 使用方法大全

    原文地址:http://daikainan.iteye.com/blog/1405575 Toast 是一个 View 视图,快速的为用户显示少量的信息. Toast 在应用程序上浮动显示信息给用户, ...