如何为类似于 "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) 将图标从应用程序抽屉中的位置很好地动画化到屏幕中央,就好像它知道我现在有启动画面一样。没有对它进行太多实验,但如果有人可以解释,请做:)
为了实现闪屏,我做了以下工作:
添加一个插图可绘制对象,它将以插图为中心显示所需的图标。我的版本使用矢量可绘制对象,看起来像这样 (/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" />
添加两个主题。一个用于初始屏幕,一个用于默认屏幕。我之前没有自定义主题,因为我没有扩展 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>
我将 SplashScreen-Theme 配置为 Android Manifest 中的初始主题,如下所示:
<application
...
android:theme="@style/SplashTheme">
在 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>
我正在寻找使我的 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) 将图标从应用程序抽屉中的位置很好地动画化到屏幕中央,就好像它知道我现在有启动画面一样。没有对它进行太多实验,但如果有人可以解释,请做:)
为了实现闪屏,我做了以下工作:
添加一个插图可绘制对象,它将以插图为中心显示所需的图标。我的版本使用矢量可绘制对象,看起来像这样 (
/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" />
添加两个主题。一个用于初始屏幕,一个用于默认屏幕。我之前没有自定义主题,因为我没有扩展
中的主题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>
我将 SplashScreen-Theme 配置为 Android Manifest 中的初始主题,如下所示:
<application ... android:theme="@style/SplashTheme">
在
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>