ComposeView随笔随记-把旧的xml加载在新的composeUI当中
在composeUI当中来预览
简单示例
@Preview
@Composable
fun OldStyFragmentUIPreview() {
AndroidView(
factory = { context ->
LayoutInflater.from(context/*传入到这里*/).inflate(R.layout.preferences, null/*上一级元素*/)
},
modifier = Modifier.fillMaxSize()//变大变高
)
}
此外,还有update选项可以加入
update = { view ->
// 这里可以对 View 进行后续的更新操作
}
不使用id查找
使用ViewBinding
多个Fragment需要在res/values/ids.xml当中指定id
否则退出删除界面就会删干净然后出问题(
然后就是Android developer的这个示例
class ExampleFragmentMultipleComposeView : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View = LinearLayout(requireContext()).apply {
addView(
ComposeView(requireContext()).apply {
setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
)
id = R.id.compose_view_x
//jklhlhkjhkhj
}
)
addView(TextView(requireContext()))
addView(
ComposeView(requireContext()).apply {
setViewCompositionStrategy(
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
)
id = R.id.compose_view_y
// gyifvgvgyhguih
}
)
}
}
<resources>
<item name="compose_view_x" type="id" />
<item name="compose_view_y" type="id" />
</resources>
区分
在旧的布局/Fragment 里手动塞进一个Compose区域 和 在Compose 代码里塞进一个旧的XML/View
前者
只是一个静态的UI(或者说组件?),有compose管理
addView(ComposeView(...))
后者
val composeViewInFragment = ComposeView(requireContext()).apply{}
在Fragment继承的类当中使用requireContext()来获取context
在@compose当中则使用本地组合变量
val context = LocalContext.current

浙公网安备 33010602011771号