在传统的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
)
}
您可以使用上面的代码并说些什么。谢谢。
如果您使用 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 的思维方式是函数式编程。