提问人:KZoNE 提问时间:11/12/2023 更新时间:11/16/2023 访问量:50
是否可以在同一活动中同时使用 Android jetpack Compose 视图和 xml 文件?
Is it possible to use both Android jetpack Compose views and xml files together in same Activity?
问:
我在 Android 应用程序中遇到一个问题,即我无法在我的 ComponentActivity 子类中使用 supportFragmentManager。根据我的理解,ComponentActivity 不支持开箱即用的 FragmentManager。如果我想使用 supportFragmentManager 活动应该是 AppCompatActivity 或 FragmentActivity 的子类。但是,我遇到了一个似乎不可用的问题。我想在我的课堂上同时使用 JetPack Compose 和 XML,
我遵循了这个 https://stackoverflow.com/a/65653754/3467187
class AbcActivity : ComponentActivity(n) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_permissio)
if (savedInstanceState == null) {
// Here I want to use supposrtFragmentManger
}
}
}
Gradle 文件看起来像这样,
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
implementation("androidx.activity:activity-compose:1.8.0")
..
}
有没有想过在同一个类中使用 JetPack Compose 和 XML,就像我可以使用片段管理器一样?
答:
0赞
ItzDavi
11/16/2023
#1
是的,您可以在 XML 中使用 Compose,也可以反过来使用。
从这个答案。
方法 1
1. 添加 XMLComposeView
<androidx.compose.ui.platform.ComposeView
android:id="@+id/my_composable"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
2. 设置活动中的内容
findViewById<ComposeView>(R.id.my_composable).setContent {
MaterialTheme {
Surface {
Text(text = "Hello!")
}
}
}
方法 2
您可以使用 .AndroidViewBinding
在继续使用此方法之前,请阅读此内容
@Composable
fun AndroidViewBindingExample() {
AndroidViewBinding(ExampleLayoutBinding::inflate) {
exampleView.setBackgroundColor(Color.GRAY)
}
}
Compose 中的 XML
AndroidView(
factory = { context ->
val view = LayoutInflater.from(context).inflate(R.layout.my_layout, null, false)
val textView = view.findViewById<TextView>(R.id.text)
// do whatever you want...
view // return the view
},
update = { view ->
// Update the view
}
)
评论