【发布时间】:2021-07-11 09:46:07
【问题描述】:
我想使用 Jetpack Compose 实现启动画面。在旧的 View 系统中,我们可以通过 XML Theme 更改 android:windowBackground。
如何在 Compose 中执行此操作?
【问题讨论】:
标签: android android-jetpack-compose
我想使用 Jetpack Compose 实现启动画面。在旧的 View 系统中,我们可以通过 XML Theme 更改 android:windowBackground。
如何在 Compose 中执行此操作?
【问题讨论】:
标签: android android-jetpack-compose
当我查看AndroidManifest.xml 时,我看到该应用仍在使用旧的themes.xml 进行活动。
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppName">
从这里我只是编辑主题以应用windowBackground
<style name="Theme.AppName" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="android:windowBackground">@color/black</item>
</style>
我没有创建新样式,只是使用主要样式。只需在可组合的根上应用白色Surface 即可在活动出现时隐藏启动背景。
【讨论】:
窗口背景是 Android 本身特有的,它告诉系统此活动“始终”绘制什么背景。
例如,一个完全没有视图的活动仍然可以有背景,正如它在其主题中定义的那样。这实际上用于诸如启动画面之类的东西,因为它们没有 UI,只有背景。由于活动的背景不需要时间来绘制,而 UI 可能会延迟。
Compose 是一个 UI 框架,任何 UI 都只会在它准备好时才被绘制,这意味着它只会在 Activity 准备好时显示。因此,在 Compose 中不可能出现启动画面。更像是,它是无关的。
如果您只想为整个 UI 设置背景,可以将整个 UI 放在带有背景的 Box 中。或者在MaterialTheme 中设置背景颜色。如果你不使用主题,只需制作一个普通的 Composable,它只是一个 Box
【讨论】:
onCreate 之后调用),而应用程序只显示一个空白的白屏。