Jetpack如何在引擎盖下工作

时间:2019-10-25 12:02:08

标签: android android-jetpack-compose

添加到Arch组件中的新Jetpack compose组件就像Flutter Ui制作。

它如何使Ui变得如此?

它是否使用像Skia这样的本地代码引擎,还是像以前一样遵循ViewGroup的方式?

2 个答案:

答案 0 :(得分:1)

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

Compose不是视图,这是一组新的Jetpack UI Widget,基本上,这是一个Kotlin编译器插件,可呈现Android Canvas(我想尚无相关文档),与现有android的视图系统完全兼容,最后一个开发者峰会上有talk涵盖了其内部工作原理,I / O也有另一个talk

答案 1 :(得分:1)

Compose创建一个当前名为.container { display: flex; background: linear-gradient(to left, transparent 50%, rgba(0, 0, 0, 0.3) 50%), linear-gradient(to top, transparent 50%, rgba(0, 0, 0, 0.3) 50%); margin-bottom:0.5em; } .left { flex-grow: 1; flex-shrink: 1; flex-basis: 0px; min-width: 0px; overflow: hidden; border: 1px solid red; } .center { flex-grow: 0; flex-shrink: 0; flex-basis: 200px; border: 1px solid green; } .right { flex-grow: 1; flex-shrink: 0; flex-basis: 0px; border: 1px solid blue; /* i work around */ width: 100%; max-width: calc(50vw - 100px); display: table; /* IE11 : cause max-content is not supported and flex is average */ /* filter not IE 11 to reset default */ display: initial; width: initial; max-width: initial; }的视图,该视图继承ViewGroup,并在其画布上绘制窗口小部件树。它还会为此视图处理动作/键盘事件。

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

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

但是,<div class="container"> <div class="left"> left<br/> shrinks to 0 </div> <div class="center"> center<br/> fixed width, always centered (unless right column is too small to fit it's content) </div> <div class="right"> right<br/> long_content_no_wrap_or_overflow </div> </div> <div class="container"> <div class="left"> left<br/> shrinks to 0 </div> <div class="center"> center<br/> fixed width, always centered (unless right column is too small to fit it's content) </div> <div class="right"> right<br/>right<br/>right<br/>right<br/>right<br/>right<br/> long_content_no_wrap_or_overflow </div> </div>和此处使用的许多其他类不是标准框架类。例如,在Kotlin中重新定义了Canvas for Compose。类似地,存在新的@supportsAndroidComposeView和其他新类。他们在内部使用框架类进行工作,但这是实现细节。绘制时,您将使用这些新类。

由于Compose是一个库,并且不在Android设备上本地提供,因此该库包含在每个使用Compose的应用程序中。 同样,这里没有涉及本机代码,所有工作都是在Kotlin中完成的,并成为应用程序智能代码的一部分。通过使用Compose,您的应用程序将不会包含任何其他本机库(可能是如果创建者不改变主意的话)。