【问题标题】:How does jetpack compose work under the hoodJetpack compose 如何在引擎盖下工作
【发布时间】:2019-10-25 12:02:08
【问题描述】:

Arch 组件中新增的 Jetpack compose 组件类似于 Flutter Ui 制作。

它是如何制作 Ui 的?

它是使用像 Skia 这样的原生代码引擎,还是仍然像以前一样遵循 ViewGroup 的方式?

【问题讨论】:

标签: android android-jetpack-compose


【解决方案1】:

Compose 创建一个当前名为AndroidComposeView 的视图,它继承了 ViewGroup,并在其画布上绘制了小部件树。它还为此视图处理运动/键盘事件。

由于实现细节,该视图可能添加了更多帮助视图,但基本上对于 Compose 的“小部件”,您不会在视图层次结构中看到经典视图。布局检查器目前对 Compose 没有帮助 - 您可以尝试一下,但您不会看到您的小部件。

承诺开发者能够创建自己的自定义小部件,可以直接在 Canvas 上绘制,为自己或子设置布局,或处理输入事件。

然而,Canvas 和这里使用的许多其他类不是标准的框架类。例如,在 Kotlin 中重新定义了 Canvas for Compose。类似的还有新的PaintShape 和其他新类。他们在内部使用框架类进行工作,但这是实现细节。绘图时,您将使用这些新类。

由于 Compose 是一个库,而不是原生于 Android 设备上,因此该库包含在每个使用 Compose 的应用中。 这里也没有涉及本机代码,一切都在 Kotlin 中完成,并成为您应用程序的 dexed 代码的一部分。通过使用 Compose,您的应用将不会包含任何额外的原生库(如果创建者不改变主意,可能会这样)。

【讨论】:

  • 感谢您的回复。它是否比布局层次结构更快?我的意思是,如果你定义了一组视图,那么在向用户展示的最终设计中,哪一个会更快?
  • 还没有人知道,他们还在开发这个新系统。
【解决方案2】:

不,它没有使用旧 UI Toolkit 中的任何东西,实际上他们正在构建它来克服旧 UIToolkit 的问题。

Compose 不是视图,它是一组新的 Jetpack UI Widget,基本上,它是一个 Kotlin 编译器插件,它可以渲染 Android Canvas(我想还没有相关文档),完全兼容现有的 android 的视图系统,最后一个开发者峰会有一个 talk 介绍了它的内部工作原理,I/O 也有另一个 talk

【讨论】:

  • 插件不渲染,它将@Composable 函数转换为不同的形式(注入一些样板代码)。渲染的是一个库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2023-01-20
相关资源
最近更新 更多