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

8
在基于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>

样式还有2个style.xml文件——一个用于黑色主题,一个用于白色主题:

 <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_back</item>
    </style>

而它是从清单文件中调用的:

<activity
            android:name="com.app.ui.splash.SplashActivity"
            android:theme="@style/SplashTheme">

现在的问题是,当我的应用从浅色模式切换到深色模式时,用户将关闭应用程序,然后再次打开应用程序,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)
            }
        }
    }

在这种情况下应该怎么办?如何在从样式和可绘制文件加载时就在第一实例中加载深色模式的启动画面?

3个回答

9

我遇到了和你一样的问题,最终我意识到目前还没有办法在不包含黑暗模式功能的Android版本上实现这一点。因此,对于旧版本,即使您在应用程序中启用了黑暗模式主题,您也将看到浅色启动画面。

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

你也可以在其他应用程序中测试这种行为,比如安卓 9 及以下版本的 WhatsApp 和 Messenger,在应用内开启深色模式后,它仍会显示浅色闪屏。希望这能帮助某些人节省时间。


3
实际上,这个问题有一个简单的解决方案。将您的深色模式启动画面设为默认值。我个人认为白色/明亮颜色启动画面似乎是可怕的传统。
当我在黑暗的房间打开应用程序时,我讨厌被瞬间致盲,需要几秒钟来适应环境。行业标准不应该有明亮颜色的启动画面,而应该使用柔和/较暗的色调作为默认背景。
我意识到这更多是个人观点,但它可以解决您在旧设备上的问题,因为您无需选择,您的默认值已经是深色启动画面。

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接