背景
华为对新发布的机器进行适配测试,发现手淘存在全面屏适配问题,随后还附了个3页的文档,文档比较粗泛的描述了一下不适配将会存在的问题,适配可以采取的措施,以及Google开发者文档。简单来说,因为全面屏长宽比大于16:9的标准屏,如果不做全面屏适配,会出现上下方黑边,对于全屏设置背景的图片,可能出现上下拉伸效果,体现到手淘上是这样的:
![](https://private-alipayobjects.alipay.com/alipay-rmsdeploy-image/skylark/png/5b4b141d-1efd-4242-8520-adbe6e05bd47.png)
和手机淘宝的拉伸:
![](https://private-alipayobjects.alipay.com/alipay-rmsdeploy-image/skylark/png/3bb140a3-1e05-4a63-b5b9-d4d08ad961a9.png)
随后贴出了完美适配过的王者荣耀:
![](https://private-alipayobjects.alipay.com/alipay-rmsdeploy-image/skylark/png/aa240b0d-25a2-4fa4-bb82-21f5362cb4bc.png)
打脸啪啪啪啊,再一看适配文档日期,居然这个问题存在了大半年,不禁为用户捏了把汗。。。
再来看下某东的闪屏页,中规中矩,没这个毛病:
再来看下某东的闪屏页,中规中矩,没这个毛病:
![](https://private-alipayobjects.alipay.com/alipay-rmsdeploy-image/skylark/png/aa6baa63-bbb2-4845-9c73-2e1cc37e672f.png)
淘宝好歹也是大厂,首屏就输给了某东,这个我服~~~~
开始适配
既然问题存在,那就开干吧,按照华为文档的说法是:
![](https://private-alipayobjects.alipay.com/alipay-rmsdeploy-image/skylark/png/5dbbbba6-9a97-4e06-931a-13cb636161ee.png)
也就是说,只要在application全局添加android.max_aspect属性即可,so eazy!但随后打开主工程的AndroidManifest.xml,看到android.max_aspect已经存在,时间是2017-06-01。确认了一下google 开发者文档,targetSdkVersion=23是Ok的,也就是说之前做过全面屏适配,只是启动页被忽视掉了。那对于启动页这种纯图片背景的怎么适配呢?在文档中看到这么一句话:
![](https://private-alipayobjects.alipay.com/alipay-rmsdeploy-image/skylark/png/facc718e-380b-437d-88e4-c38155148ecb.png)
再看一下启动页的代码实现,本质上是定义了一个Theme.Welcome,然后将Theme.Welcome设置到Application,这样就实现了图片打底的特效,研究了一番Theme的适配属性,发现不存在类似于CENTER_CROP效果的(组合)属性。那既然使用ImageView承接可以实现,何不将启动页改造成ImageView来实现闪屏的效果呢?说干就干,写了一个很简单的Demo,设置好ImageView的属性,如下:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/aab