ComposeView
想在传统 xml 布局项目中使用 Compose 怎么办?¶
Compose 工具包已经提供了 androidx.compose.ui.platform.ComposeView
来在 xml 中增加 Compose UI。
只需要在对应的 xml 中使用即可
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Text View From XML" />
<androidx.compose.ui.platform.ComposeView
android:id="@+id/composeView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
在 Activity 中通过 findViewById 或者 view-binding 拿到 composeView 组件后,就可以调用 setContent 方法,在方法体中就可以编写 Compose 代码
val composeView = findViewById<ComposeView>(R.id.composeView)
composeView.setContent {
Column {
Text(text = "Text From Compose")
Text(text = "Text From Compose")
Text(text = "Text From Compose")
}
}
想在 Compose 中使用 View 怎么办?¶
同样系统也提供了 AndroidView 来进行这样的操作。在上面的例子中,我们可以这样写
val composeView = findViewById<ComposeView>(R.id.composeView)
composeView.setContent {
Column {
Text(text = "Text From Compose")
Text(text = "Text From Compose")
Text(text = "Text From Compose")
AndroidView(factory = {
TextView(it)
}) {
it.apply {
text = "这是从 Compose 里旋转的 xml 布局的 TextView"
}
}
}
}
怎么样!是不是可以套娃了