Jetpack Compose 如何为用户创建视图?

问题描述 投票:0回答:1

在传统的Android应用程序中,如果你想显示一个TextView,你可以inflate一个包含TextView的xml文件。您运行该应用程序,然后您将看到 TextView。

    <TextView
        android:id="@+id/tv_finish"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="finish_button"
        />

当我使用compose时,我不知道Compose是如何创建视图的?底层使用Android原生视图吗?或者说,Compose 是否创建了一个不同于传统 Android 的新视图系统来显示视图?

Column(
    modifier = Modifier.clickable { isExpand = !isExpand }
) {
    Text(
        text = msg.author, color = Color.DarkGray,
        style = MaterialTheme.typography.titleLarge
    )
}

您可以使用上面的代码并说些什么。谢谢。

android view android-jetpack-compose
1个回答
0
投票

如果您使用 Compose Activity 创建 Android 应用程序,您将看到 senContentView 方法已被 setContent{} 替换 然后在该函数的源代码中您可以看到以下代码:

public fun ComponentActivity.setContent(
    parent: CompositionContext? = null,
    content: @Composable () -> Unit
) {
    val existingComposeView = window.decorView
        .findViewById<ViewGroup>(android.R.id.content)
        .getChildAt(0) as? ComposeView

    if (existingComposeView != null) with(existingComposeView) {
        setParentCompositionContext(parent)
        setContent(content)
    } else ComposeView(this).apply {
        // Set content and parent **before** setContentView
        // to have ComposeView create the composition on attach
        setParentCompositionContext(parent)
        setContent(content)
        // Set the view tree owners before setting the content view so that the inflation process
        // and attach listeners will see them already present
        setOwners()
        setContentView(this, DefaultActivityContentLayoutParams)
    }
}

最后你会看到传统的 Android SetContentView :

setContentView(本,DefaultActivityContentLayoutParams)

所以它使用老方法。尽管 XML 基础是 OOP,但 compose 的思维方式是函数式编程。

© www.soinside.com 2019 - 2024. All rights reserved.