再談今日頭條適配方案使用中的問題

問題起因

在用了今日頭條適配方案后感覺非常的完美,但是后來在應(yīng)用冷啟動(dòng)的時(shí)候總感覺黑屏的時(shí)間有點(diǎn)長(zhǎng),決定優(yōu)化一下,在將應(yīng)用啟動(dòng)時(shí)一切可以延遲加載和非必要初始化的代碼進(jìn)行處理之后依然會(huì)有短暫的黑屏,那么只能使用另一種方法,將啟動(dòng)頁(yè)的theme中添加android:windowBackground屬性,設(shè)置成和啟動(dòng)頁(yè)的背景圖,當(dāng)然啟動(dòng)頁(yè)只是一個(gè)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>

果然沒有被拉伸,但是仔細(xì)看一下,背景圖的大小居然突然的變化了,這是什么鍋?

問題分析

最后終于鎖定了原因,由于使用了今日頭條的適配,那歸根結(jié)底到底為什么呢?
其實(shí)系統(tǒng)使用了原始的DisplayMetrics生成的drawable來暫時(shí)替換冷啟動(dòng)的黑屏,但是當(dāng)我們使用今日頭條適配后改變了DisplayMetrics,后來又使用了適配后的DisplayMetrics,DecorView再次繪制背景時(shí),LayerDrawable背景圖的大小發(fā)生了變化,所以我們?cè)俅慰吹降膯?dòng)頁(yè)突然發(fā)生了變化。

解決方案

基于此,我們?cè)撛趺唇鉀Q呢?
我們可以進(jìn)行妥協(xié)將啟動(dòng)頁(yè)的android:windowBackground設(shè)置成透明,當(dāng)然如果你還想設(shè)置成logo,那么可以重新切圖,需要將整個(gè)啟動(dòng)圖全部切出來,不要使用xml作為背景圖,當(dāng)然這樣也會(huì)造成包體積增大,不推薦。
還有一種方法就是我們可以在適配之前先獲取到啟動(dòng)頁(yè)的背景圖,然適配后在把背景圖設(shè)置回去就ok了,如下:

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

當(dāng)然如果DecorView還會(huì)多次繪制背景的話也只能是暫時(shí)的,并不能根本處理,如果看源碼我們知道
DecorView其實(shí)就是一個(gè)FrameLayout布局,那么既然我們是通過theme設(shè)置的背景,那么我們可以在設(shè)置主題后禁止DecorView再次繪制也可以解決,在啟動(dòng)頁(yè)的Activity中重寫setTheme,如下:

    @Override
    public void setTheme(int resid) {
        super.setTheme(resid);
        getWindow().getDecorView().setWillNotDraw(true);
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ps: 適配啊對(duì)于 Android 來說永遠(yuǎn)不會(huì)過時(shí) 相關(guān)概念 屏幕尺寸 含義:手機(jī)對(duì)角線的物理尺寸 單位:英寸(...
    前行的烏龜閱讀 2,564評(píng)論 0 20
  • 目錄介紹 1.屏幕適配定義 2.相關(guān)重要的概念2.1 屏幕尺寸[物理尺寸]2.2 屏幕分辨率[px]2.3 屏幕像...
    楊充211閱讀 1,639評(píng)論 0 1
  • 本是IT人,偶做投機(jī)客。 醉舞編程半卷書,網(wǎng)絡(luò)識(shí)天闊。 野鶴伴閑云,淡看福和禍。 論到宮商不辯時(shí),笑指基因錯(cuò)。
    Alexander_Lu閱讀 6,054評(píng)論 2 5
  • 主線目標(biāo)引導(dǎo)清晰,支線目標(biāo)引導(dǎo)全面 首充引導(dǎo)體驗(yàn)(文案,時(shí)機(jī),強(qiáng)需求) 游戲活動(dòng)滿足在線時(shí)長(zhǎng)需求 貨幣單位產(chǎn)生強(qiáng)需求
    tengyi閱讀 217評(píng)論 0 0
  • 很有價(jià)值的一篇博文:http://zhenyuan.baijia.baidu.com/article/313163...
    場(chǎng)景為王閱讀 283評(píng)論 0 0

友情鏈接更多精彩內(nèi)容