1. 程式人生 > >Android 關於APP啟動時白(黑)屏解決辦法

Android 關於APP啟動時白(黑)屏解決辦法

APP啟動時,在點選APP到APP啟動頁加載出來會有一段時間的白屏或黑屏,很醜陋。。。其實,黑屏或者白屏這裡並不是不正常,而是還沒載入到佈局檔案,就已經顯示了window視窗背景,黑屏白屏就是window視窗背景。
那window視窗背景在那裡提供呢?在提供theme裡面,如下提供的是白色背景,那就是啟動時白屏一會兒的顏色設定。

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:windowNoTitle">true
</item> <item name="android:windowBackground">@color/white</item> <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

所以,在theme設定windowBackground就可以解決啟動時白屏黑屏一會兒了,下面提供三種解決方案:
一、提供.png背景圖

提供背景圖是解決的一個方法,但是要適配各種螢幕,提供很多張圖片。除非圖片非常複雜只能用背景圖了就用這種方法吧,否則個人不建議。

二、提供.9.png(NinePatch)背景圖片

如果圖片不是很複雜,可以做成NinePatch圖片,那就直接製作NinePatch圖片,提供一張就可以適配任何手機,何樂而不為呢。

三、使用Layout-list製作背景圖片

如果可以使用這種方式,推薦使用這種Layout-list製作背景圖片。前2種都是使用圖片佔用記憶體啊,使用Layout-list比較省記憶體,做出app也不會說因為圖片多體積變大吧。
AndroidManifest.xml,這裡注意application使用的theme是AppTheme,而LauncherActivity使用的主題是StartAppTheme。這樣做的效果是隻要LauncherActivity使用StartAppTheme主題,其他Activity都是用AppTheme主題哦。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.launcheractivity"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".LauncherActivity"
            android:label="@string/app_name"
            android:theme="@style/StartAppTheme" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <activity android:name=".MainActivity"></activity>
    </application>

</manifest>

styles.xml,2個主題設定

<resources xmlns:android="http://schemas.android.com/apk/res/android">

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Light.NoTitleBar">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@color/white</item>
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>
    <style name="StartAppTheme" parent="AppBaseTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@drawable/layout_list_start_pic</item>
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>
</resources>

layout_list_start_pic.xml 啟動頁面使用這個作為背景圖片

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 設定整個螢幕背景為白色 -->
    <item >
        <color android:color="@color/white"/>
    </item>

    <!-- 中間logo -->
    <item >
        <bitmap
            android:gravity="center"
            android:src="@drawable/ic_launcher" />
    </item>
    <!-- 底部圖表 -->
    <item android:bottom="10dp">
        <bitmap
            android:gravity="bottom|center_horizontal"
            android:src="@drawable/copyright" />
    </item>

</layer-list>