存在于 Android < 12 时,SplashScreen 不是全屏

SplashScreen not full screen when exist on Android < 12

我有一个带有白色状态栏和导航栏的应用程序。我定义了一个这样的 Splash 主题。

<style name="Theme.MySplash" parent="Theme.SplashScreen">
    <item name="windowSplashScreenBackground">#00f</item>
    <item name="windowSplashScreenAnimatedIcon">@drawable/ic_baseline_play_arrow_24</item>
    <item name="windowSplashScreenAnimationDuration">200</item>

    <item name="postSplashScreenTheme">@style/Theme.AppTheme</item>
</style>

<style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="android:statusBarColor">#fff</item>
    <item name="android:navigationBarColor">#fff</item>
</style>

MainActivity

class MainActivity : AppCompatActivity() {

    var keepSplashScreen = true

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val splashScreen = installSplashScreen()

        splashScreen.setOnExitAnimationListener { splashScreenProvider ->
            val fadeAnim = ObjectAnimator.ofFloat(
                splashScreenProvider.view, View.ALPHA, 1f, 0f
            )
            fadeAnim.duration = 4000L
            fadeAnim.interpolator = AccelerateInterpolator()
            fadeAnim.doOnEnd { splashScreenProvider.remove() }
            fadeAnim.start()
        }
        splashScreen.setKeepVisibleCondition { keepSplashScreen }
        setContentView(R.layout.activity_main)

        Handler(Looper.getMainLooper()).postDelayed({
            keepSplashScreen = false
        }, 3000)
    }
}

SplashTheme 在设备 Android 12 (Pixel 4XL) 上运行良好,但在 Android 8 (Xiomi A2) 上,SplashTheme 无法全屏显示它存在。

从该视频中,当 SplashScreen 开始存在时(淡入淡出动画),显示白色状态栏和导航栏(在 Android 12 上,SplashScreen 存在时始终全屏) . 如何让 SplashScreen 在 Android < 12 时始终全屏显示?

试试这个:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

将其写在您的 onCreate 方法中。更多信息,Read this.

我觉得问题可能是你没有使用compact库。如果您不使用支持库,您的启动画面在较低版本中的外观将与以前完全相同。

implementation 'androidx.core:core-splashscreen:1.0.0-alpha01'

SplashScreen 实际上使用了包含图像视图的框架布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="false">

  <ImageView
      android:id="@+id/splashscreen_icon_view"
      android:layout_width="?attr/splashScreenIconSize"
      android:layout_height="?attr/splashScreenIconSize"
      android:layout_gravity="center"/>

</FrameLayout>