【问题标题】:Android 12 splash screen before api 21api 21 之前的 Android 12 启动画面
【发布时间】:2021-09-01 08:46:29
【问题描述】:

我正在尝试将我的应用程序升级到引入启动屏幕 API 的目标 android 31,所以我遵循了提到的迁移过程here,但迁移后应用程序无法运行,因为启动屏幕 API 仅支持 android 版本 21 和上面那么支持21以上旧版本的流程是什么?

【问题讨论】:

  • 您可以直接使用 SplashScreen API,但我们强烈建议使用 Androidx SplashScreen 兼容库。 compat 库使用 SplashScreen API,支持向后兼容,并为所有 Android 版本的初始屏幕显示创建一致的外观。
  • 感谢您的回复,但我已经在使用 Androidx Splashscreen 但它在 Android 21 之前不支持
  • 它说它支持所有版本,你能证明什么是假的吗?
  • 我用显示我正在使用的库的构建错误更新了问题

标签: android splash-screen android-12


【解决方案1】:

Androidx SplashScreen 类的工作方式如下:

在 API 31+ (Android 12+) 上,此类调用平台方法。

在 API 31 之前,平台行为被复制,但启动屏幕上的Animated Vector Drawable支持除外。

问题是Animated Vector Drawable 类是在 Android 21 中引入的,所以当前的 Androidx SplashScreen 类向后兼容 Android +21,所以我想出了一些解决方案。 我创建了两种不同的闪屏活动,一种是处理旧版本,另一种是使用 Androidx SplashScreen API。我根据当前的android版本制作了系统午餐启动画面,所以我做了以下

1- 为了允许编译和构建应用程序,我必须将此行添加到我的清单文件中

<uses-sdk tools:overrideLibrary="androidx.core.splashscreen"/>

2- 按照文档中的migration 步骤创建使用 Androidx SplashScreen API 的新启动屏幕活动。

3- 在 values 文件夹下创建 bools.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="new_splash_enabled">false</bool>
    <bool name="old_splash_enabled">false</bool>
</resources>

4- 覆盖 values-vX 中的 bools.xml(X 是 minSdkVersion)在我的情况下是 16,所以我在同一级别的 values 文件夹中创建了 values-v16 文件夹,并在其下创建 bools.xml,如下所示

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="new_splash_enabled">false</bool>
    <bool name="old_splash_enabled">true</bool>
</resources>

5- 覆盖 values-vX 中的 bools.xml(X 是您要应用新 SplashScreen 的最低版本,因此它是 21 到 31 之间的任意数字)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="new_splash_enabled">true</bool>
    <bool name="old_splash_enabled">false</bool>
</resources>

6- 在您的清单中,我让系统根据 bools.xml 文件中的值决定启动哪个启动活动

        <activity
            android:name=".NewSplash"
            android:theme="@style/Theme.App.Starting"
            android:enabled="@bool/new_splash_enabled"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name=".OldSplash"
            android:enabled="@bool/old_splash_enabled">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

【讨论】:

    猜你喜欢
    • 2022-12-20
    • 2021-12-26
    • 2022-12-28
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 2022-01-16
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多