Android: アプリの背景色を透明にする

アプリを起動したときに真っ白な画面が数秒表示される問題があった。
まず起動処理に時間がかかっていることが問題だが、デバッグビルドではアプリに問題がなくても起動が遅いことがある。
とにかく真っ白画面が気になるので、アプリの背景色を透過させて、最初のアクティビティがレイアウトを表示するまでは透明になるようにした。

アプリの背景色を透明にするにはスタイルにandroid:windowBackground、android:colorBackgroundCacheHint、android:windowIsTranslucentを追加する。

app/src/main/res/values/styles.xml
<変更前>


<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/base_primary_color</item>
        <item name="colorPrimaryDark">@color/dark_primary_color</item>
        <item name="colorAccent">@color/accent_color_b</item>
    </style>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>

<変更後>


<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/base_primary_color</item>
        <item name="colorPrimaryDark">@color/dark_primary_color</item>
        <item name="colorAccent">@color/accent_color_b</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
</resources>

これで真っ白画面が表示されなくなった。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です