如何为 Wear OS 3 应用程序创建类似于“大”应用程序的启动屏幕?

use*_*030 3 android splash-screen wear-os

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

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

如果还不清楚:我希望我的应用程序拥有与其他应用程序相同类型的启动屏幕。

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

use*_*030 5

我自己解决了。我在Android 开发者页面的“品牌发布”下找到了解决方案。重要的是操纵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" />
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我将 SplashScreen-Theme 配置为 Android Manifest 中的初始主题,如下所示:

    <application
        ...
        android:theme="@style/SplashTheme">
    
    Run Code Online (Sandbox Code Playgroud)
  4. MainActivity我扩大布局后切换了主题。我在通货膨胀和通货膨胀之间做了这件事setContentView,但在后者之后可能没有什么区别。

    binding = ActivityMainBinding.inflate(layoutInflater)
    setTheme(R.style.LushMainTheme)
    setContentView(binding.root)
    
    Run Code Online (Sandbox Code Playgroud)