【问题标题】:Remove default Splash Screen from Android 12 (Example)从 Android 12 中删除默认启动画面(示例)
【发布时间】:2021-09-07 15:31:07
【问题描述】:

Android SDK 的最新 Beta 版在 Android 12(模拟器)上运行的每个应用上展示默认启动画面,根据要求,我们已经拥有自己的启动画面。

如果有人研究过它,请告诉我如何禁用/删除它(最好有示例代码)。

【问题讨论】:

标签: android beta android-splashscreen


【解决方案1】:

没有直接的 API 可以禁用默认启动画面,但我们可以通过一些变通方法来解决这个问题。

方法一:

<item name="android:windowIsTranslucent">true</item> 添加到您的风格中

<style name="Theme.RemoveSplashScreenTheme" parent="@style/BaseTheme">
    <item name="android:windowIsTranslucent">true</item>
</style>

将此应用于启动屏幕活动。

<activity
        android:name="com.test.SplashScreenActivity"
        android:launchMode="singleInstance"
        android:theme="@style/Theme.RemoveSplashScreenTheme"
        android:noHistory="true" />

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

但它会使系统启动画面不可见,并且看起来应用程序没有响应。如果有人遇到此问题,请遵循下一个解决方法。

方法2:

因此,我们可以通过暂停应用以绘制现有的初始屏幕并显示系统初始屏幕来解决此问题,直到应用准备就绪。

private void setupOnPreDrawListenerToRootView() {
  View mViewContent = findViewById(android.R.id.content);
  mViewContent.getViewTreeObserver().addOnPreDrawListener(
       new ViewTreeObserver.OnPreDrawListener() {
           @Override
           public boolean onPreDraw() {
               Log.v("onPreDraw","onPreDraw called");
               if (isAppInitialized) {
                    mViewContent.getViewTreeObserver().removeOnPreDrawListener(this);
                    startActivity(new Intent(this, MainActivity.class));

                   return true;
               } else {
                   // The content is not ready; suspend.
                   return false;
               }
           }
       });
}

这里我们需要在应用准备好后将 isAppInitialized 更新为 true,然后我们可以移除侦听器并启动 MainActivity,直到它会保持。应用程序来绘制现有的启动屏幕并执行所有应用程序初始化。

【讨论】:

  • 这实际上只会让启动画面保持可见,直到应用程序初始化,它不会阻止启动画面显示。闪屏不是应用绘制的,而是系统绘制的,系统会等待应用绘制完毕,然后关闭闪屏。
  • 就像一个魅力。谢谢:)
【解决方案2】:

我相信这是不可能的,虽然我很希望我错了。

docs 没有提及禁用它的任何内容,它会自动添加到所有应用程序中。

我在我的 Pixel 5 设备上运行 Android 12 beta 2.1,因此我的许多应用都出现了双闪屏。

我建议放弃将您的代码迁移到新 API,并确保您的代码与 Android 11 及更低版本的设备兼容。

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2018-07-28
    • 1970-01-01
    相关资源
    最近更新 更多