再谈今日头条适配方案使用中的问题

问题起因

在用了今日头条适配方案后感觉非常的完美,但是后来在应用冷启动的时候总感觉黑屏的时间有点长,决定优化一下,在将应用启动时一切可以延迟加载和非必要初始化的代码进行处理之后依然会有短暂的黑屏,那么只能使用另一种方法,将启动页的theme中添加android:windowBackground属性,设置成和启动页的背景图,当然启动页只是一个logo,为了背景图不被拉伸,将图片放在了xml中,如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:gravity="fill">
        <shape>
            <solid android:color="@color/comn_bg"/>
        </shape>
    </item>
    <item android:gravity="center_horizontal|top" android:top="150dp">
        <bitmap android:gravity="center_horizontal|top" android:src="@drawable/guide_hunterlogo"/>
    </item>
</layer-list>

果然没有被拉伸,但是仔细看一下,背景图的大小居然突然的变化了,这是什么锅?

问题分析

最后终于锁定了原因,由于使用了今日头条的适配,那归根结底到底为什么呢?
其实系统使用了原始的DisplayMetrics生成的drawable来暂时替换冷启动的黑屏,但是当我们使用今日头条适配后改变了DisplayMetrics,后来又使用了适配后的DisplayMetrics,DecorView再次绘制背景时,LayerDrawable背景图的大小发生了变化,所以我们再次看到的启动页突然发生了变化。

解决方案

基于此,我们该怎么解决呢?
我们可以进行妥协将启动页的android:windowBackground设置成透明,当然如果你还想设置成logo,那么可以重新切图,需要将整个启动图全部切出来,不要使用xml作为背景图,当然这样也会造成包体积增大,不推荐。
还有一种方法就是我们可以在适配之前先获取到启动页的背景图,然适配后在把背景图设置回去就ok了,如下:

Drawable background = getWindow().getDecorView().getBackground();
getWindow().setBackgroundDrawable(background);

当然如果DecorView还会多次绘制背景的话也只能是暂时的,并不能根本处理,如果看源码我们知道
DecorView其实就是一个FrameLayout布局,那么既然我们是通过theme设置的背景,那么我们可以在设置主题后禁止DecorView再次绘制也可以解决,在启动页的Activity中重写setTheme,如下:

    @Override
    public void setTheme(int resid) {
        super.setTheme(resid);
        getWindow().getDecorView().setWillNotDraw(true);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ps: 适配啊对于 Android 来说永远不会过时 相关概念 屏幕尺寸 含义:手机对角线的物理尺寸 单位:英寸(...
    前行的乌龟阅读 2,394评论 0 20
  • 目录介绍 1.屏幕适配定义 2.相关重要的概念2.1 屏幕尺寸[物理尺寸]2.2 屏幕分辨率[px]2.3 屏幕像...
    杨充211阅读 1,578评论 0 1
  • 本是IT人,偶做投机客。 醉舞编程半卷书,网络识天阔。 野鹤伴闲云,淡看福和祸。 论到宫商不辩时,笑指基因错。
    Alexander_Lu阅读 5,968评论 2 5
  • 主线目标引导清晰,支线目标引导全面 首充引导体验(文案,时机,强需求) 游戏活动满足在线时长需求 货币单位产生强需求
    tengyi阅读 205评论 0 0
  • 很有价值的一篇博文:http://zhenyuan.baijia.baidu.com/article/313163...
    场景为王阅读 268评论 0 0