禁用 Android 12 默认启动画面

Den*_*man 7 android splash-screen kotlin

在谷歌 I/O 演示中,谷歌团队表示我们可以禁用默认启动画面。我想这样做,但我找不到方法。

有没有人能够实现这一目标?

后期编辑:

我误解了那个视频中演讲者所说的内容。似乎您只能编辑默认启动画面,而不能禁用它。

Sho*_*run 39

你可以添加这一行:

          <item name="android:windowIsTranslucent">true</item>    
Run Code Online (Sandbox Code Playgroud)

在 style.xml 文件中关闭样式标记之前。它使您的默认 Android 启动画面变得透明!

  • 请注意,这会增加最终用户的感知延迟,从而降低用户体验,因为在用户触摸图标的那一刻和您的活动实际出现的时间之间不会发生任何事情。 (11认同)

Vad*_*aen 24

在 Android 12 上,无法选择退出启动屏幕。只能自定义:图标、窗口背景、退出动画。

默认情况下,从用户触摸到绘制应用程序的第一帧为止都会显示启动屏幕,因此为了最大限度地减少启动屏幕的显示时间,您可以尝试减少应用程序的启动时间。

您还可以实现自己的退出动画,以便从启动画面到应用程序的过渡更加无缝。

如果您以前使用过专用的 SplashScreen Activity 并希望保留该 Activity,那么这里是官方文档中的解决方法。

  • 作为一名应用程序开发人员,这真的让我很恼火。使我创建的每个启动屏幕都变得毫无用处。 (21认同)
  • 我同意克里斯,我发现这基本上毫无意义且具有局限性。现在,所有的应用程序都将失去其独特性,因为一些俗气的(而且可能经常做得很糟糕)最长 1 秒的动画基本上是通过一个相对较小的孔出现的。老实说,我认为这是一种倒退。 (6认同)

kau*_*nge 12

遗憾的是,您无法通过 Android 12 设备提供的 API 直接禁用默认启动屏幕。

如果您的应用程序有自定义启动屏幕并且您不想迁移到这种新方法,您可以尝试以下技巧。

基本上你要做的就是覆盖你的启动屏幕主题res\values-v31\themes.xml并设置一个透明图标。

<!-- My custom theme for splash screen activity -->
<style name="Theme.Splash" parent="Theme.Main">
    <item name="android:windowBackground">@color/background</item>
    <!-- Set a transparent .png as your icon -->
    <item name="android:windowSplashScreenAnimatedIcon">@drawable/transparent_image</item>
</style>
Run Code Online (Sandbox Code Playgroud)

这将使您摆脱应用程序启动时启动时出现的默认应用程序图标。


Kar*_*tti 6

没有直接的 API 可以禁用默认的启动屏幕,但如果我们添加<item name="android:windowIsTranslucent">true</item>到您的样式中

<style name="Theme.RemoveSplashScreenTheme" parent="@style/BaseTheme">
    <item name="android:windowIsTranslucent">true</item>
</style>
Run Code Online (Sandbox Code Playgroud)

并将其应用于启动屏幕活动。

<activity
        android:name="com.test.SplashScreenActivity"
        android:launchMode="singleInstance"
        android:theme="@style/Theme.RemoveSplashScreenTheme"
        android:noHistory="true" />
Run Code Online (Sandbox Code Playgroud)

这将用透明屏幕替换默认的启动屏幕。如果应用程序已有 2 个闪屏问题,此解决方法将消除该问题。

  • 后一个“&lt;activity&gt;”元素中的“android:theme”值与“&lt;style&gt;”资源中的主题名称不匹配。我可以使用 `&lt;style&gt;` 方法来工作,但是 `android:windowIsTranslucent="true"` 没有记录为在 `&lt;activity&gt;` 上可用,并且我无法让它工作。另外,请注意,系统启动屏幕是不可见的,但它仍然存在,无论它通常会在那里多久,所以看起来应用程序不会响应启动器图标点击一段时间 - 这可能是一个问题一些应用程序。话虽如此,这是一个有趣的黑客! (3认同)