【问题标题】:Change android:windowBackground in Jetpack Compose在 Jetpack Compose 中更改 android:windowBackground
【发布时间】:2021-07-11 09:46:07
【问题描述】:

我想使用 Jetpack Compose 实现启动画面。在旧的 View 系统中,我们可以通过 XML Theme 更改 android:windowBackground。

如何在 Compose 中执行此操作?

【问题讨论】:

    标签: android android-jetpack-compose


    【解决方案1】:

    当我查看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 即可在活动出现时隐藏启动背景。

    【讨论】:

    • 我很想找到一种方法来隐藏加载应用程序时白屏的初始闪烁,每个人都说这是无法避免的。我已经按照你说的设置了我的主色作为窗口背景,现在白屏闪烁消失了!非常感谢!! :)
    【解决方案2】:

    窗口背景是 Android 本身特有的,它告诉系统此活动“始终”绘制什么背景。

    例如,一个完全没有视图的活动仍然可以有背景,正如它在其主题中定义的那样。这实际上用于诸如启动画面之类的东西,因为它们没有 UI,只有背景。由于活动的背景不需要时间来绘制,而 UI 可能会延迟。

    Compose 是一个 UI 框架,任何 UI 都只会在它准备好时才被绘制,这意味着它只会在 Activity 准备好时显示。因此,在 Compose 中不可能出现启动画面。更像是,它是无关的。

    如果您只想为整个 UI 设置背景,可以将整个 UI 放在带有背景的 Box 中。或者在MaterialTheme 中设置背景颜色。如果你不使用主题,只需制作一个普通的 Composable,它只是一个 Box

    【讨论】:

    • 正如我所指定的,我想实现一个启动画面。在这种情况下,使用可组合将不起作用,因为它需要时间来渲染(它在 MainActivity onCreate 之后调用),而应用程序只显示一个空白的白屏。
    • 正如我所说,windowBackground 是 Android 的东西。意思是,启动画面是 Android 的东西。在 Compose 中无法制作启动画面,因为 Compose 是一个 UI 框架,UI 需要一段时间来绘制
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2022-09-29
    相关资源
    最近更新 更多