如何在 Android 中放置深色和浅色模式的启动画面?

Sir*_*mra 3 android splash-screen kotlin

在基于 Kotlin 的 Android 应用程序中,我使用样式属性开发了一个启动画面,如下代码所示:

可绘制文件(这个是浅色的,同样是深色的,具有不同的渐变颜色代码):

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <gradient
                android:angle="270"
                android:endColor="#43dc91"
                android:startColor="#29abe2" />
        </shape>
    </item>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/My_Image" />
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

Style 也有 2 个 style.xml 文件——一个用于深色,一个用于浅色:

 <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_back</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

它是从清单中调用的:

<activity
            android:name="com.app.ui.splash.SplashActivity"
            android:theme="@style/SplashTheme">
Run Code Online (Sandbox Code Playgroud)

现在的问题是,当我的应用程序从浅色模式切换到暗模式时,用户将关闭应用程序然后再次打开应用程序,2 秒后,它仍然显示浅色模式闪屏,2 秒后,暗模式闪屏将加载。

这可能是因为当应用程序在启动活动 -> Oncreate 中加载时,我正在验证应用程序是否具有深色主题的偏好,然后加载深色模式,然后将我的应用程序切换到深色模式,如下所示:

private fun setAppTheme() {
        when {
            userHolder.theme != null -> {
                if (userHolder.theme == string_(R.string.text_dark_mode))
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
                else AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
            }
            else -> {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

遇到这种情况怎么办?在从样式和可绘制对象加载时,如何在第一个实例本身中加载暗模式飞溅?

小智 6

我遇到了和你一样的问题,最后,我意识到目前对于不包含暗模式功能的 Android 版本没有办法做到这一点。因此,对于旧版本,即使您在应用程序中启用暗模式主题,您也会看到浅色闪屏

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
Run Code Online (Sandbox Code Playgroud)

您也可以在 Android 9 及更低版本中的 WhatsApp 和 Messenger 等许多其他应用程序中测试此行为,即使您在应用程序内打开了暗模式,它也会向您显示浅色闪屏。愿它帮助某人节省他的时间。