android - Jetpack Compose 是如何在引擎盖下工作的

标签 android android-jetpack-compose

Arch 组件中新增的 Jetpack compose 组件就像是 Flutter Ui 的制作。

它是如何制作 Ui 的?

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

最佳答案

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

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

开发人员 promise 能够创建自己的自定义小部件,这些小部件可以直接在 Canvas 上绘画,为自身或子级设置布局,或处理输入事件。

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

由于 Compose 是一个库,并不原生存在于 Android 设备上,因此该库包含在每个使用 Compose 的应用中。 此外,此处不涉及 native 代码,所有内容均在 Kotlin 中完成,并成为应用程序的 dexed 代码的一部分。通过使用 Compose,您的应用将不会包含任何额外的原生库(如果创作者不改变主意的话,可能是这样)。

关于android - Jetpack Compose 是如何在引擎盖下工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58558163/

相关文章:

android - 几秒钟后如何删除 ListView 项目?

android - 如何更改 ActionBarSherlock 的选项卡文本颜色?

android - 如何在android compose中更改对话框的宽度

android - 如何从两个 Widget 组成一个新的 UI 元素?

android - 使用 Jetpack Compose ScrollableTabRow 时避免初始滚动

android - 升级到 Jetpack Compose Alpha 12 会导致 setContent 出现错误

android - 尝试在将一个 Activity 更改为第二个 Activity 后保存编辑文本字段的值,然后返回到 jetpack compose 中的第一个 Activity

android - 无法从函数 serviceAdded 中的 ServiceEvent 获取 txtrecords(来自 JmDNS)

android - 谷歌地图包含Android上的位置

java - 在满足条件之前防止关闭 AlertDialog.Builder