如何在Jetpack Compose组件中引用XML定义的样式资源?
失效原因
你使用的写法无法生效,是因为Jetpack Compose的TextStyle类没有接收XML样式资源ID的构造重载,你传入的R.style.Style_TextView_HeaderSubtext是Int类型的资源ID,会被误识别为字体样式的枚举值,自然不会加载对应XML样式。
可行实现方案
方案1:用AndroidView包装原生TextView(100%兼容XML样式)
如果你需要完全复用已定义的XML样式,不需要转写属性,直接用AndroidView嵌套原生TextView即可,所有XML定义的样式属性都会生效:
AndroidView( factory = { context -> // 注意XML中的样式名点号在R文件中会转为下划线,完整资源ID为R.style.Style_Monet_TextView_HeaderSubtext TextView(context, null, 0, R.style.Style_Monet_TextView_HeaderSubtext).apply { text = "June 2021" } }, modifier = Modifier.wrapContentSize() )
方案2:转写为Compose原生Text属性(性能更优,适合纯Compose项目)
如果你的项目以Compose为主,直接把XML的样式属性映射为Compose的对应参数即可:
Text( text = "June 2021", style = TextStyle( color = Color(0xFF737373), fontSize = 12.sp ), // XML的margin属性对应Compose Modifier的padding modifier = Modifier.padding( start = 16.dp, end = 24.dp, bottom = 16.dp ) )
内容的提问来源于stack exchange,提问作者Rishabh Deep Singh
相关产品推荐
相关产品推荐

