我使用 API 进行了非常简单的启动,背景设置正确。然后我开始研究主题并修复错误,当我完成后,应用程序图标仍然显示一个具有正确背景的圆角正方形,但飞溅是白色或黑色的,它也对夜间模式做出反应,而它应该是始终保留其品牌颜色。
这是我的
theme.mxl
文件,我在其中定义了两个主题和启动画面
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base Chalkboard Theme. -->
<style name="Theme.Base.Chalkboard" parent="Theme.Material3.DayNight.NoActionBar">
<item name="android:background">@color/chalkboard_backgroundColor</item>
<item name="android:textColor">@color/chalkboard_textColor</item>
<item name="android:tint">@color/chalkboard_tintColor</item>
<item name="android:fontFamily">@font/open_sans</item>
<item name="colorAccent1">@color/chalkboard_colorAcent1</item>
<item name="colorAccent2">@color/chalkboard_colorAcent2</item>
</style>
<!-- Base Corporate Theme. -->
<style name="Theme.Base.Corporate" parent="Theme.Material3.DayNight.NoActionBar">
<item name="android:background">@color/corporate_backgroundColor</item>
<item name="android:textColor">@color/corporate_textColor</item>
<item name="android:tint">@color/corporate_tintColor</item>
<item name="android:fontFamily">@font/open_sans</item>
<item name="android:textColorPrimaryDisableOnly">@color/corporate_textColor</item>
<item name="android:textColorAlertDialogListItem">@color/corporate_textColor</item>
<item name="colorAccent1">@color/corporate_colorAcent1</item>
<item name="colorAccent2">@color/corporate_colorAcent2</item>
</style>
<!-- Base splash theme -->
<style name="Theme.Splash" parent="Theme.Material3.DayNight.NoActionBar">
<item name="windowSplashScreenBackground">@color/royal_blue</item>
<item name="windowSplashScreenAnimatedIcon">@mipmap/ic_launcher</item>
<item name="windowSplashScreenAnimationDuration">200</item>
<item name="postSplashScreenTheme">@style/Theme.Base.Chalkboard</item>
</style>
</resources>
这就是我在我的
MainActivity
内调用启动屏幕的方式,这部分没有改变:
@Override
protected void onCreate(Bundle savedInstanceState) {
// Handle the splash screen transition.
long delay = 578L;
SplashScreen splashScreen = SplashScreen.installSplashScreen(this);
splashScreen.setKeepOnScreenCondition(() -> keepSplashOnScreen);
new Handler(Looper.getMainLooper()).postDelayed(() -> keepSplashOnScreen = false, delay);
我的应用程序主题是
Theme.Splash
,而每个活动都使用 Theme.Base.Chalkboard
,如果用户在设置中选择了此主题,则该主题将替换为 Theme.Base.Corporate
。
我尝试重新创建
mipmap
图标,使用 SVG
和 PNG
作为尝试某些内容的源,由于我的目标是 Android 10Q 及更高版本的设备,因此我已禁用旧图标。我不知道要测试什么。评论我的主题并没有解决问题。我特别担心android:background
设置。
Theme.Splash
的父主题错误。这应该是:
<style name="Theme.Base.SplashScreen" parent="Theme.SplashScreen" tools:targetApi="s">
...
</style>