Compose和Fragment混合显示示例
本文介绍了Jetpack Compose与传统Fragment的混合开发方案。在Fragment中使用Compose时,通过ComposeView的setContent方法实现Compose界面;在Compose中使用Fragment时,则借助AndroidView和FragmentContainerView容器,在update回调中进行Fragment的替换操作。两种方式分别通过ComposeV
·
Jetpack Compose 和 Fragment混合嵌入页面
Fragment中使用Compose
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
return ComposeView(requireContext()).apply {
setContent {
Column(
modifier = Modifier
.fillMaxWidth()
.background(Color.Red)
.padding(8.dp)
) {
Text(
"这里是被嵌入的测试Fragment页面",
color = Color.White, fontSize = 21.sp,
modifier = Modifier.padding(16.dp)
)
}
}
}
}
Compose中使用Fragment
val context = LocalContext.current
if (context is FragmentActivity) {
AndroidView(factory = {
FragmentContainerView(it).apply {
id = View.generateViewId()
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT
)
}
}, update = { view ->
context.supportFragmentManager.beginTransaction().replace(view.id, HDevFragment())
.commitNowAllowingStateLoss()
})
}
总结
主要通过ComposeView和AndroidView的使用实现。在传统View布局中,ComposeView相当于把Compose转换为View布局,通过ComposeView中的setContent进行界面布局书写;在Compose中,AndroidView提供了显示传统View的功能,只需要实现factory、update内容即可,上述代码通过FragmentContainerView容器进行构建,在update中进行实际fragment的嵌入。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)