【问题标题】:Does an equivalent of <include> exist to reuse designs/layouts in Jetpack Compose?在 Jetpack Compose 中是否存在等效的 <include> 来重用设计/布局?
【发布时间】:2020-08-17 00:31:19
【问题描述】:

在正常的 Xml 活动构建中存在一个 &lt;include&gt; 属性,允许在不同的活动中重用设计,例如顶部和底部栏。我一直在 Jetpack Compose 中寻找类似的东西,但我找不到任何东西。 我知道@Composable 函数作为独立元素工作,可以随时使用,但如果我使用这种方法,这些元素将在活动更改时重新加载。

【问题讨论】:

    标签: android android-jetpack-compose


    【解决方案1】:

    没有必要:只需调用定义了要使用的设计/布局的函数即可。

    在传统的 Android 布局中,需要 &lt;include&gt; 标签,因为 XML 没有“调用”另一个 XML 文件的任何概念。在 Compose 中,每个布局和每个组件都是一个函数,因此您可以在任何想要重用该布局的地方简单地调用该函数。

    将可组合函数的内容直接包含在另一个可组合函数中与调用该可组合函数之间几乎没有区别(运行时的内部簿记略有不同,但通常 Compose 的用户无需担心)。

    实际上,您可以标记一个可组合函数inline 来更直接地实现这一点,并将内容内联到调用函数中。

    【讨论】:

    • 这种方法的设计问题是,如果我只是在我需要它的每个活动上调用@Composable 函数,例如底部栏,则每次都会重新加载该栏,我只想重新加载其余的内容,将类似于在应用程序的其余部分“顶部”有一个 UI 层。
    • &lt;include&gt; 也是如此:它将在每个使用它的布局中重新膨胀。
    • @IgnacioMiranda:“每次都会重新加载栏,我只想重新加载其余的内容”——这不是 Compose 的工作方式。 Compose 是一个声明式 UI 系统。基本上,一切都是“每次都重新加载”,Compose 运行时决定如何更改渲染的内容以匹配重新组合的结果。
    • @CommonsWare 那么是不是不可能实现类似 xml 片段但用 Compose 编写的东西?
    • @IgnacioMiranda:是的,你可以。瑞安在他的回答中解释了这一点。您只是认为“只要活动更改,这些元素就会重新加载”是一个问题,但事实并非如此。 Compose 通过使用remember 和相关属性,可以根据状态变化确定哪些可组合项需要重新评估。 Compose 可以确定这在渲染 UI 方面意味着什么。一般来说,我们不再担心“这些元素会在活动发生变化时重新加载”,而是使用可组合的函数简单地描述我们想要的 UI。
    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多