从 Android 12 中删除默认启动屏幕(示例)

Zee*_*med 3 beta android android-splashscreen

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

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

Kar*_*tti 11

没有直接的 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 个闪屏问题,此解决方法将消除该问题。

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

方法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;
               }
           }
       });
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这实际上只会让启动屏幕保持可见,直到应用程序初始化为止,它不会阻止启动屏幕显示。启动画面不是由应用程序绘制的,而是由系统绘制的,系统会等待应用程序绘制,然后再关闭启动画面。 (2认同)