如何为类似于 "big" 应用程序的 Wear OS 3 应用程序创建启动画面?

How to create a splash screen for a Wear OS 3 app similar to the "big" apps?

我正在寻找使我的 Wear OS 3 应用程序具有简单启动画面的可能性。我找不到任何具体的内容,但我读到 Android 12 为每个应用程序引入了一个自动启动画面。不过不知道这是否适用于 Wear OS 3。

我可以在我的 Galaxy Watch 4 上看到多个应用程序(例如 Spotify 和 Strava),它们以类似的启动画面开头:单击“应用程序抽屉”中的应用程序图标时,图标从应用程序抽屉位置移动到中心 1-2 秒,同时出现黑色背景。之后显示该应用程序。我的猜测是那些启动画面是由 Android 生成的。但我的应用程序只显示黑屏,直到应用程序首次绘制。我在我的 OnCreate 中通过 Thread.sleep 人为地延迟了我的应用程序的启动。 (如果这是一个问题,请告诉我如何人为地创建延迟来测试启动画面)

如果还不清楚:我希望我的应用程序具有与其他人相同类型的启动画面。

非常感谢您的帮助!预先感谢您的任何建议

我自己解决了。我在“品牌发布”下的 Android Developer page 上找到了解决方案。重要的是操纵 window ,它似乎基本上是显示的应用程序的根层,即使布局尚未膨胀(因此是实现启动画面的正确位置)。对我来说有趣的是 Android (Wear) 将图标从应用程序抽屉中的位置很好地动画化到屏幕中央,就好像它知道我现在有启动画面一样。没有对它进行太多实验,但如果有人可以解释,请做:)

为了实现闪屏,我做了以下工作:

  1. 添加一个插图可绘制对象,它将以插图为中心显示所需的图标。我的版本使用矢量可绘制对象,看起来像这样 (/res/drawable/splash_background.xml):

    <?xml version="1.0" encoding="utf-8"?>
    <inset
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:drawable="@drawable/ic_laucher_icon_composite"
        android:insetTop="60dp"
        android:insetRight="60dp"
        android:insetBottom="60dp"
        android:insetLeft="60dp" />
    
  2. 添加两个主题。一个用于初始屏幕,一个用于默认屏幕。我之前没有自定义主题,因为我没有扩展 MainTheme 我实际上什至不需要它,但我还是添加了它。启动画面主题操纵 windowBackground 这是关键。 这些都是我在文件 res/values/styles.xml:

    中的主题
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="SplashTheme" parent="@android:style/Theme.DeviceDefault">
            <item name="android:windowBackground">@drawable/splash_background</item>
        </style>
        <style name="MainTheme" parent="@android:style/Theme.DeviceDefault">
        </style>
    </resources>
    
  3. 我将 SplashScreen-Theme 配置为 Android Manifest 中的初始主题,如下所示:

    <application
        ...
        android:theme="@style/SplashTheme">
    
  4. MainActivity 中,我在扩充布局后切换了主题。我在 inflation 和 setContentView 之间做了这个,但在后者之后可能没有什么区别。

    binding = ActivityMainBinding.inflate(layoutInflater)
    setTheme(R.style.LushMainTheme)
    setContentView(binding.root)
    

谢谢@user3697030,很好的答案,但我稍微调整了 splash_background.xml,因为你有透明背景。

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/black"/>
        </shape>
    </item>
    <item
        android:width="@dimen/launch_icon_size"
        android:height="@dimen/launch_icon_size"
        android:gravity="center">
        <bitmap
            android:src="@drawable/ic_launcher_round"
            android:gravity="fill_horizontal|fill_vertical"/>
    </item>
</layer-list>