屏幕分辨率
1.概念问题
- 屏幕分辨率 :指在手机屏幕上面的像素点数 比如19201080、1080720
- 屏幕像素密度 (ppi):指每英寸上面的像素点的个数,单位是ppi,计算方式为
(1280*1280 + 1920*1920)开方 / (x*x + y*y)开方
可根据上面的勾股定理计算 - 像素密度(dpi): 物理概念,是定死的,客观存在的不会改变,是人为定的值,比如几部不同分辨率不同尺寸的ppi可能分别是430,440,450,那么在Android系统中,可能dpi会全部被指定为480
- 屏幕无关像素(dp/dip):Android的一个设计单位,是物理单位,跟屏幕像素密度无关,只不过跟像素存在换算关系,160dpi 是系统为 mdpi 屏设定的基准密度,也就是说在mdpi的手机上,
1px = 1dp = 1英寸/160
,所以dp和px的换算关系为:px = dp * dpi /160
,也就是说1dp的大小是固定的,但是在不同手机上1dp的物理长度包含的像素点个数不同,在160dpi的手机上1dp = 1px,其他手机分辨率越高,1dp包含的像素个数越多 - 对应关系
ldpi -> 120dpi 1dp = 0.75px
mdpi -> 160dpi 1dp = 1px
hdpi -> 240dpi 1dp = 1.5px
xhdpi -> 320dpi 1dp = 2px
xxhdpi -> 480dpi 1dp = 3px (目前这种是主流dpi)
xxxhdpi-> 640dpi 1dp = 4px (市场上很多手机已经是这种dpi了)
备注:假如自己算出来的ppi是443,那么在Android系统中会向上取整,所以会认为你的dpi是480,所属的屏幕为xxhdpi
##2.屏幕适配问题
为什么会存在屏幕适配这个问题呢?举个栗子,1080p的手机,大部分手机拿到的densityDpi=480,density=3,但是Google Pixel得到的却是densityDpi=420,density=2.625,也就是说当你有一个View宽度写为了360dp那么在大多数手机上是充满全屏的,但在部分手机(比如上面的Pixel)却显示不了全屏,所以为了能够在所有手机上都显示同样的效果,就需要进行屏幕适配。
一般情况下,我们的页面在高度这个维度上都是需要滑动的,而且大部分情况是不限制死高度的,所以我们需要做的是尽可能在宽度上保证所有手机一致,那么我们就可以只在宽度上面进行适配。
那么怎么适配呢?假如UI出图是基于1920px*1080px,那么我们可以认为总的宽度是360cp(cp是随便写的一个单位,意思是custom px),那么可以得出1cp = 3px,这样的话在720p的屏幕上按照比例就可以得到1cp = 2px,根据这个原理我们就可以穷举市场上所有的屏幕尺寸按照宽度来适配,但是可能穷举不全,所以需要给默认的, 在下面的目录下面的xml文件配置<dimen name="1cp">3px</dimen>
,配置项目中所需要的尺寸
values
values-mdpi <dimen name="1cp">1px</dimen>
values-hdpi <dimen name="1cp">1.5px</dimen>
values-xhdpi <dimen name="1cp">2px</dimen>
values-xxhdpi <dimen name="1cp">3px</dimen>
values-xxxhdpi <dimen name="1cp">4px</dimen>
values-480*320 <dimen name="1cp">0.88px</dimen>
values-800*480 <dimen name="1cp">1.33px</dimen>
values-854*480 <dimen name="1cp">1.33px</dimen>
values-960*540 <dimen name="1cp">1.5px</dimen>
values-1024*600 <dimen name="1cp">1.66px</dimen>
values-1024*768 <dimen name="1cp">2.13px</dimen>
values-1184*720 <dimen name="1cp">2px</dimen>
values-1196*720 <dimen name="1cp">2px</dimen>
values-1280*720 <dimen name="1cp">2px</dimen>
values-1280*800 <dimen name="1cp">2.22px</dimen>
values-1812*1080 <dimen name="1cp">3px</dimen>
values-1920*1080 <dimen name="1cp">3px</dimen>
values-2560*1440 <dimen name="1cp">4px</dimen>
人为写的话比较繁琐,可以通过跑脚本来实现
算法就是 宽度 / 360 * n = n(cp),其实就是按宽度将屏幕分成360份(分成多少份都可以,一般按照UI来,这样比着UI图做UI的时候好对应),分完之后,每一份是1cp,50cp就需要再乘以50,然后配置在对应的资源文件里面
可以参考其他成熟方式,其中有一个今日头条的适配方案其实跟本方案是一样的,只不过他的写法更简单
进入头条UI适配方案
头条UI适配方案问题解决参考1
头条UI适配方案问题解决参考2
相关阅读
关于相关系数的一些理解误区,这篇文章 讲的很好,正如这个网站的名字mathsisfun一样,full of cases, pics and fun :)我想补充我认
产品规划分为两类;一是产品研发规划,主要是基于市场需求,以市场细分为基础,形成产品开发的整体理念,以期拓展新的增长点。另一个是产品
网上赚钱贴吧,关于流量排名的快速提升方法。流量是呈递增趋势增长的,一个网站只要有一个流量,他就会成无数个大正方形不断递增,而镜面
它是欧洲几年第一,或创造与丰富多彩的旅游时尚市场,还是世界第一,勇电子商务的新领域扩展的时代的开始的巅峰之作,无论是现在是戎师雅
关于文案写作,作者分享了一份写作清单,希望能够给你一些帮助。你上网查“文案写作技巧”,或“文案方法”啥的,立马能找到很多长文,但无