添加到Arch组件中的新Jetpack compose组件就像Flutter Ui制作。
它如何使Ui变得如此?
它是否使用像Skia这样的本地代码引擎,还是像以前一样遵循ViewGroup的方式?
答案 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。类似地,存在新的@supports
,AndroidComposeView
和其他新类。他们在内部使用框架类进行工作,但这是实现细节。绘制时,您将使用这些新类。
由于Compose是一个库,并且不在Android设备上本地提供,因此该库包含在每个使用Compose的应用程序中。 同样,这里没有涉及本机代码,所有工作都是在Kotlin中完成的,并成为应用程序智能代码的一部分。通过使用Compose,您的应用程序将不会包含任何其他本机库(可能是如果创建者不改变主意的话)。