Jetpack Compose如何获取字符串资源实际值用于modifier的contentDescription?
问题根因
R.string.xxx 是Android资源编译阶段自动生成的整数类型资源唯一标识,不是实际的字符串内容,直接调用toString()只会把这个整数ID转成字符串格式,自然无法得到你在strings.xml中定义的文本。
解决方案
Jetpack Compose提供了专门的stringResource() API,可直接在可组合项作用域内获取字符串资源,自动适配系统当前语言设置,完全满足TalkBack多语言读取的需求。
首先导入依赖:
import androidx.compose.ui.res.stringResource
修正后的代码示例:
// 在可组合项作用域内先获取实际字符串值 val contentDesc = stringResource(id = R.string.my_string) // 打印日志验证 Log.d("Test", contentDesc) // 设置到语义属性中 ....modifier = Modifier .fillMaxWidth() .focusRequester(focusRequesters[1]) .clearAndSetSemantics { contentDescription = contentDesc } )
注意事项
stringResource() 仅支持在带有@Composable注解的作用域内调用,如果你需要在非Compose场景(如ViewModel、普通工具类)获取字符串资源,请使用Context原生方法:
val myStr = context.getString(R.string.my_string)
内容的提问来源于stack exchange,提问作者Corrupted Disciple
相关产品推荐
相关产品推荐

