3

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

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

4

2 回答 2

4

没有直接的 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 启动屏幕问题。

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

方法二:

因此,我们可以通过暂停应用程序以绘制现有的启动屏幕并显示系统启动屏幕来解决此问题,直到应用程序准备好。

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,直到它将保持。应用程序来绘制现有的初始屏幕并执行所有应用程序初始化。

于 2021-07-18T16:06:43.017 回答
0

我相信这是不可能的,尽管我非常希望我是错的。

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

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

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

于 2021-06-24T07:43:29.910 回答