转载请注明出处(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. sql 根据身份证判断年龄是否小于18岁

    SELECT *, Age= datediff(yy,cast(case when substring(PersonalId,,) ') /*若第7位不是'1'或'2'则表示是15位身份证编码规则*/ ...

  2. idea maven打jar包

    双击clean install 会在根目录targer生成文件(注意删除test和替换yml文件)

  3. List Comprehension ()(一)

    >>> L = [1,2,3,4,5] >>> L = [x+10 for x in L] >>> L [11, 12, 13, 14, 15] ...

  4. BioGRID 互作数据库

    01 — BioGRID BioGRID 是 Biological General Repository for Interactionh Datasets 的缩写(网址为 https://thebi ...

  5. Python--面向对象的程序设计之组合应用、开发软件规范

    组合应用: class Teacher: def __init__(self,name,age,sex,salary,level): self.name=name self.age=age self. ...

  6. winform 控件拖拽和缩放

    核心类: using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using ...

  7. 泰坦尼克号沉没之谜,用数据还原真相——Titanic获救率分析(用pyecharts)

    泰坦尼克号获救率数据分析报告,用数据揭露真相. 一,船上乘客生存率分析报告 泰坦尼克号生存率仅有38%的,可见此次事件救援不力,救生艇严重不足,且泰坦尼克号号撞得是冰山,海水冷,没有救生艇,在水里冻死 ...

  8. Kali Linux下运行nfc工具测试!

    由于Kali本身就集成了很多nfc工具,用起来很方便,再加上一个acr122u读卡器,来尝试PJ学校水卡! 首先安装驱动,到龙杰官网下载Linux的,解压后进入自己Linux发行版,Kali的是Deb ...

  9. 《ArcGIS Runtime SDK for .NET开发笔记》 --Hello Word

    这里我们将创建第一个用于显示地图的APP. 1.新建一个WPF程序 首先我们打开Visual Studio,选择新建项目. 选择已安装——模板——Windows桌面——WPF应用程序  2.添加Run ...

  10. php开发面试题---攻击网站的常用手段有哪些,及如何预防(整理)

    php开发面试题---攻击网站的常用手段有哪些,及如何预防(整理) 一.总结 一句话总结: 比较记忆:注意比较各种攻击的区别,比如csrf和xss,以及xss和sql,这样才能记住 1.Sql注入是什 ...