如何在Android的黑暗和明亮模式下放置启动画面?

时间:2020-07-31 07:59:42

标签: android kotlin splash-screen

在基于Kotlin的Android应用中,我有一个Splash屏幕,该屏幕的Style属性如下代码所示:

Drawable File(这是浅色的,同样是深色的,具有不同的渐变颜色代码):

<?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>

Style还有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秒钟,它仍显示亮起模式飞溅,而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)
            }
        }
    }

在这种情况下该怎么办?如何从样式和可绘制对象加载黑暗模式启动时首先加载黑暗模式启动?

1 个答案:

答案 0 :(得分:0)

我遇到了与您相同的问题,最后,我意识到对于没有暗模式功能的Android版本,目前尚无办法。因此,对于较旧的版本,即使您使用以下方式在应用中启用了暗模式主题,您也将看到亮屏屏幕:

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

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