Android 冷啟動狀態下Splash界面拉伸問題解決


問題現象

為了防止在app啟動時出現黑屏或者白屏問題。需要選擇冷啟動處理。實現方式如下:

在styles文件中添加自定義主題:

<style name="ThemeSplash" parent="Theme.AppCompat.Light.NoActionBar">
     <item name="android:background">@drawable/bg_welcome_default</item>
     <item name="android:windowNoTitle">true</item>
     <item name="android:windowFullscreen">true</item>
     <item name="windowActionBar">false</item>
     <item name="windowNoTitle">true</item>
</style>

在Manifest文件中使用主題:

 <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity
            android:theme="@style/ThemeSplash"
            android:name=".SplashActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>

 

在app中的bg_welcome_default圖片的大小有三個640 * 960,750 * 1334,1242 * 2208。

在相匹配寬高比的手機可以正常顯示,會在類似小米9(1080 * 2340)會出現拉伸情況。(注意:在這里不能使用寬高比為1080 * 2340 的替換 1242 * 2208 的圖片。因為相同像素密度下寬高比為1242 * 2208 的手機也會存在拉伸,這樣替換不能解決根本問題。)

問題原因

在使用圖片作為全屏圖片時屏幕的寬高比和圖片的寬高比不匹配。

解決方法

圖標使用單獨切圖,背景自定義繪制,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape >
            <solid android:color="@color/white"/>
        </shape>
    </item>
    <item android:left="10dip" android:top="10dip">
        <bitmap android:src="@drawable/bg_welcome"
            android:gravity="center"/>
    </item>
</layer-list>

引申問題

經過上面方法的處理,Splash界面拉伸問題已經解決,但是還有一個小問題,就是小米9的statusBar沒有被圖片填充。經過道長排查,自定義主題代碼可以使用如下代碼:

    <style name="ThemeSplash" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/bg_welcome_default</item>
        <item name="android:statusBarColor">@android:color/transparent</item>

        <!--<item name="android:windowNoTitle">true</item>-->
        <!--<item name="android:windowFullscreen">true</item>-->
        <!--<item name="windowActionBar">false</item>-->
        <!--<item name="windowNoTitle">true</item>-->

    </style>

注意:這個主題是放在v21\styles.xml中,和上面的代碼不沖突。

到這里,冷啟動狀態下Splash界面拉伸問題基本就解決了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM