sw屏幕适配

   在Android设备中,适配是一个最普遍的问题,Android中因为屏幕分辨率的不同,会导致我们UI的显示会有很大的区别,那么怎么样才能保证同一个界面在不同屏幕中显示效果是一样的呢?这就是我们今天要做的适配,那么适配有哪些呢?传统的dp实际也是一种适配,然后还有鸿洋大神的自己写的适配,不过由于长久没有维护,所以现在好像没什么人用了,那么现在常用的适配有哪些呢,一、头条适配  二、sw适配,头条适配可能大家很熟悉了,那么今天我们来讲讲怎么实现SW适配

        sw适配原名叫smallestWidth,那怎么优雅方便的实现呢,现在带大家一起看看。

一、方案简介

这个方案的使用方式和平时我们在布局中引用dimens文件没什么区别,核心点在于生成不同宽度限定符的dimens文件,如下图(如何生成下面再讲详细的步骤)

二、实现原理

首先在项目中根据主流屏幕的最小宽度(smallestWidth,这里说下如何计算这个值:第一步:计算屏幕的DPI,这里以1920*1080 屏幕尺寸5.2来计算 DPI=1080*1080+1920*1920 然后开平方再除以160=2.6477;第二步计算最小宽度:1080/2.6477=408)生成一系列的values-sw<N>dp文件夹,当把项目运行到不同的设备上时候,系统会根据当前设置的最小宽度去匹配对应的文件夹中的对应的dimens文件,如果系统根据当前屏幕最小宽度没有找到对应的文件夹,则会去找当前设备最小宽度相近的文件夹,即只会寻找小于或者等于当前设备最小宽度的文件夹,比如当前设备最小宽度值是502,当时生成的文件夹中并没有502这个文件夹,有500和503的文件夹,那么系统就会去匹配500这个文件夹。这就是优于宽高限定符屏幕适配方案的容错机制,并且可以少生成很多文件夹,减小apk的体积。

三、dimens.xml生成原理

主要涉及到两个因素,第一个就是确定最小宽度基准值,第二个因素就是确定项目需要适配哪些最小宽度,通俗理解就是需要生成多少个不同的dimens文件。

第一个因素:最小宽度基准值可以理解为想要把屏幕分成多少份,假设现在将屏幕分成360份,方案就会在dimens文件中生成1到360的dimens引用,如下图(这里的截图基准值用的375,所以每份的值是不够1dp,每份的宽度为0.96dp)

这里我再截图下sw-400的截图看看

在sw-400的dimens文件中,一份的宽度就是1.0667,这样最大的dp_360就正好可以覆盖整个屏幕的宽度,实现适配,这样就能保证不管项目运行在那个设备上,只要匹配到对应的dimens文件就可以实现完美的适配,就算是没有匹配到,也能最大程度的容错,同样可以实现适配,并不会出现太大的适配问题,这个适配方式的原理其实本质上就是百分比适配。

第二个因素:我们需要适配哪些最小宽度

理论上来说越多的最小宽度文件就能最大程度的保证适配的完美性,但是实际操作中并非如此,首先主流的机型的最小宽度都是常见的那些,更多的文件不一定会正在用上,其次,文件越多就会造成apk文件体积的增大,所以要在这两者之间取一个合适的方案(在后面的插件中已经实现了最主流的一些,基本可以覆盖所有机型,如果自己发现有没有覆盖的,可以在配置文件修改添加,这个后面会说)

四、方案的优点

1、非常稳定,极低的概率出现意外

2、不会出现任何的性能损耗(还是google原来的dp适配)

3、适配范围可以自由控制,不会影响到第三方库(如头条、宏洋的autoLayout都会存在这个问题)

4、在插件的配合下,方案很容易移植,成本很低

五、方案的缺点

1、在布局中引入dimens文件,虽然学习成本低,但是维护修改时会有些麻烦

2、侵入性高,和第一条一样,因为布局文件中引入了大量的dimens文件,修改麻烦

3、无法覆盖所有机型(个人觉得这个缺点可以忽略,没有那一个适配方案可以做到完美)

4、不能自动支持横竖屏切换。当方向旋转后,宽高会互换,因为有最小限定,实际上就是不区分宽高的,要实现可以添加land和port这样的限定符

六、使用方法(这里以375宽度的设计图来说,常见的苹果2倍设计图尺寸)

1、先导入插件(如下图,如何导入插件就不说了)

ScreenMatch.jar

2、在项目的values文件夹下建立dimens文件,导入默认的dimens引用值(这一步其实就是安卓原始的dimens适配,如下图)

3、在项目任意位置点击右键选择如下图的红框选项,然后选择自己要适配的项目

点击OK就可以生成文章最开始的不同的dimens文件

4、根据自己项目的实际情况修改配置文件

切换到project目录下,打开如下红框勾选文件,修改如下三个地方,第一处base_dp就是自己项目设计图的基准宽度,根据自己的实际情况填写;第二处mach_dp就是自己要适配的一些最小宽度;第三处ignore_dp忽略不适配的最小宽度

5、修改完配置文件后,重启ide就可以生效了





 

猜你喜欢

转载自blog.csdn.net/guodashen007/article/details/108140271