引言:Compose视图是如何构成的,如何运行在传统的View上的呢
Compose ui是由视图树组成,树是由LayoutNode构成,Composable最终统一由CompseView进行管理,ComposeView是连接传统View和Compose的桥梁。通过布局查看器查看布局结构如下
接下来一次介绍它们
什么是AbstractComposeView
它有三个子类ComposeView、DialogLayout、PopupLayout子类,分别对应Android下Activity、Dialog、Popup的window窗口,它是对Android系统下的各类窗口进行适配,并生成对应的Compose。
ComposeView它又是什么 (ViewGroup)
它继承自AbstractComposeView,负责对Android平台的Activity的窗口进行适配;
1、ComposeView接入传统的View视图后,内部的ui都在Compose内部完成,来自AndroidComposeView的绘制,测量布局、手势事件分发都是下沉到LayoutNode去完成
class ComposeView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : AbstractComposeView(context, attrs, defStyleAttr) {
}
AndroidComposeView作用
它是ComposeView唯一的子节点,它也是一个ViewGroup,也是LayoutNode视图树的持有者它的结构如下
internal class AndroidComposeView(
context: Context,
override val coroutineContext: CoroutineContext
) : ViewGroup(context), Owner, ViewRootForTest, PositionCalculator, DefaultLifecycleObserver {
override val root = LayoutNode().also {
it.measurePolicy = RootMeasurePolicy
it.density = density
// Composed modifiers cannot be added here directly
it.modifier = Modifier
.then(semanticsModifier)
.