安卓12启动画面图标未显示

65

我在启动一个新应用程序时遇到了奇怪的问题。我正在利用新的Android 12闪屏API创建我的闪屏屏幕,并按照Google提供的指南进行操作。我将core-splashscreen包含在我的项目中,以提供与旧版本的Android OS的兼容性。当我在旧的OS版本(如API 30)上运行应用程序时,我看到了预期的闪屏屏幕,但是当我在API 31上运行它时,我提供的闪屏屏幕图标没有显示出来。我指定的背景颜色显示出来了,但是图标根本没有显示出来。我已经尝试过使用可绘制的资产和mipmap,但没有任何作用。我很困惑,因为我找到的每个教程都显示了我所遵循的相同步骤和他们工作的闪屏屏幕的截图,但我没有任何运气。

以下是我针对v31的闪屏屏幕样式定义的上下文:

<style name="Theme.Splash" parent="Theme.SplashScreen">
    <item name="android:windowSplashScreenBackground">@color/orange_7A</item>
    <item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_foreground</item>
    <item name="postSplashScreenTheme">@style/Theme.App</item>
</style>

除了我使用“windowSplashScreenAnimatedIcon”而不是“android:windowSplashScreenAnimatedIcon”之外,我为所有其他操作系统版本都有相同的样式。我尝试过在v31中在项目名称前加上“android:”,但两者都不起作用。这是我的MainActivity.kt:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    installSplashScreen()
    
    setContent {
        MyVeevaTheme {
            Login()
        }
    }
}

我还在AndroidManifest.xml中将“android:theme”属性设置为我的启动画面样式。我知道启动画面样式已应用,因为它遵循背景颜色,但由于某种原因它没有显示图标,尽管在较旧的操作系统版本中图标正常显示。非常感谢您能提供的任何帮助。


刚刚在 Android 12 模拟器上尝试了新的启动画面 API,但很遗憾图标没有显示出来,无论我是否设置了 "android:windowSplashScreenAnimatedIcon"。不过,"android:windowSplashScreenBackground" 是有效的。 我们应该考虑这是一个 bug 吗? 我认为这个 API 对于旧版本的 Android 设备不太友好。 - yao
10
我已经弄清楚如何显示它了。我正在按照 这篇教程 设置一个基本项目来重新制造问题,并且我注意到作者在底部附近提到的注意事项,即仅运行应用程序无法显示启动画面,您必须杀掉它并从应用程序托盘中打开应用程序。一旦我这样做了,我就能看到我的启动画面。虽然有些麻烦,但至少现在我有一种测试它的方式了。 - Joseph Hawkes-Cates
2
我已经记录了这个错误报告,因为这很令人困惑,但是通过我的最后一条评论,我现在有一种测试方法。如果有人感兴趣,这是错误报告的链接:https://issuetracker.google.com/issues/205021357。 - Joseph Hawkes-Cates
遇到了同样的问题,似乎谷歌还没有开始调查。希望能尽快解决。 - AndroidDev123
如果使用该库,应该删除android前缀。 - Vadim Caen
显示剩余3条评论
13个回答

1

如果遇到在API 33及更高版本中,启动屏幕API不始终显示图标的问题,请将以下内容添加到您的styles.xml文件中:

<item name="android:windowSplashScreenBehavior"tools:targetApi="33">icon_preferred</item>

参考自Android 文档

您可以使用windowSplashScreenBehavior来指定您的应用在Android 13及更高版本中是否始终在启动画面上显示图标。默认值为0,如果启动活动将splashScreenStyle设置为SPLASH_SCREEN_STYLE_ICON,则在启动画面上显示图标,如果启动活动未指定样式,则遵循系统行为。如果您希望永远不显示空白启动画面,并始终显示动画图标,请将其设置为值icon_preferred。

它旨在在从通知或其他应用程序而非启动器启动应用时隐藏图标。因此,只需使用上述样式属性来强制始终显示图标。


这就是让我解决问题的那个。当我尝试从深链接加载一个活动时,我遇到了这个问题,而我仍然想要看到启动画面和图标。谢谢! - undefined

0

我在运行Android 12的手机上遇到了同样的问题。上述建议都没有起作用(例如将installSpashScreen()移到super.onCreate之前等)。

对我有用的解决方法是在清单文件中的启动<activity>标签中添加android:theme属性,而不是<application>标签,这与文档相反

In the manifest, replace the theme of the starting activity to the theme you created in the previous step.

<manifest>
 <application android:theme="@style/Theme.App.Starting">
 <!-- or -->
     <activity android:theme="@style/Theme.App.Starting">

注意,你仍然需要杀死该活动并从启动器中启动它才能使其工作 :(


0
对于上面提到Nova Launcher无法显示图标的@Gimberg,非常感谢你。我花了一整天的时间试图弄清楚为什么之前可以用,现在却不行了。

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