You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin Composable中正确使用$name参数与字符串资源

解决Composable中字符串资源使用命名参数的问题

Android系统默认的字符串资源不支持$name这种命名占位符语法,仅识别%1$s这类位置占位符。你遇到的未使用参数提示,是因为直接调用stringResource(R.string.greeting, name)时,系统无法解析字符串里的$name,导致传入的参数未被实际使用。

下面提供两种替代方案,实现你想要的效果:

方案1:手动替换字符串中的命名占位符

保持现有字符串资源写法,在Composable中获取资源后手动替换$name为传入的参数值:

字符串资源(res/values/strings.xml)

<string name="greeting">Hello, my name is $name</string>

Composable代码

@Composable
fun Greeting(name: String) {
    Surface(color = Color.Green, border = BorderStroke(1.dp, color = Color.Cyan)) {
        // 替换字符串中的$name占位符
        val greetingText = stringResource(id = R.string.greeting).replace("\$name", name)
        Text(text = greetingText, modifier = Modifier.padding(24.dp))
    }
}

@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    GreetingCardTheme {
        Greeting("Zero")
    }
}

注意:Kotlin字符串中的$是模板符号,替换时需要用\$name转义,或者使用原始字符串("""$name""")避免转义。

方案2:多命名参数场景的进阶处理

如果需要处理多个命名占位符,可以借助java.text.MessageFormat,先将资源字符串的命名占位符转为格式化支持的格式,再填充参数:

字符串资源

<string name="greeting">Hello, my name is {name}</string>

自定义扩展函数

@Composable
fun stringResourceWithArgs(id: Int, args: Map<String, Any>): String {
    val baseString = stringResource(id)
    val placeholderRegex = "\\{(\\w+)\\}".toRegex()
    val paramList = mutableListOf<Any>()
    val formattedString = placeholderRegex.replace(baseString) { matchResult ->
        val paramName = matchResult.groupValues[1]
        paramList.add(args[paramName] ?: "")
        "{${paramList.size - 1}}"
    }
    return MessageFormat.format(formattedString, *paramList.toTypedArray())
}

在Composable中使用

@Composable
fun Greeting(name: String) {
    Surface(color = Color.Green, border = BorderStroke(1.dp, color = Color.Cyan)) {
        val greetingText = stringResourceWithArgs(R.string.greeting, mapOf("name" to name))
        Text(text = greetingText, modifier = Modifier.padding(24.dp))
    }
}

内容的提问来源于stack exchange,提问作者Dareus The Pedophile Rapist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:15:40