Android Jetpack Compose中如何使用strings.xml字符串资源
Jetpack Compose 中各类Android字符串资源的正确调用方式
在Jetpack Compose中调用Android资源,全部基于框架内置的可组合资源API实现,无需手动获取Context和Resources实例,可直接在Composable作用域内完成各类资源的读取,对应几类常见资源类型的调用方式如下:
基础无参静态字符串
对应xml中定义的普通<string>资源,直接使用stringResource()传入资源ID即可:
// 调用app_name资源 Text( text = stringResource(id = R.string.app_name) )
带占位参数的字符串
对应xml中带格式占位符的<string>资源,在stringResource()的可变参数部分传入对应占位符的实际值即可:
// 替换greeting字符串中的占位符,传入实际参数 Text( text = stringResource(id = R.string.greeting, "Compose 开发者") )
注意:当前示例里定义的
Hello %!属于单占位符写法,多参数场景下建议使用带位置序号的占位符(如Hello %1$s,你有%2$d条新消息),避免参数传值顺序错乱。
复数形式(Plurals)字符串
对应xml中定义的<plurals>资源,需要使用专属的pluralStringResource()API,不能直接套用普通的stringResource():
val likeCount = 12 Text( text = pluralStringResource( id = R.plurals.likes, // 复数资源ID quantity = likeCount, // 用于匹配quantity规则的数值:1匹配one标签,其余匹配other标签 likeCount // 用于替换字符串中数字占位符的实际值 ) )
字符串数组
对应xml中定义的<string-array>资源,使用泛型版的arrayResource()调用:
// 加载行星字符串数组 val planetArray = arrayResource<Array<String>>(id = R.array.planets) // 遍历数组渲染UI Column { planetArray.forEach { planetName -> Text(text = planetName) } }
补充说明:如果需要在非Composable作用域(如ViewModel、通用工具类)中读取资源,可以通过
LocalContext.current.resources获取Resources实例后再读取,但优先推荐在UI层使用Compose专属的资源API,减少跨层的Context依赖耦合。
内容的提问来源于stack exchange,提问作者Valeriy Katkov
相关产品推荐
相关产品推荐

