求助:strings.xml中符号与格式化参数无空格时的显示问题
解决Android strings.xml中美元符号与价格无空格的格式化问题
哈哈,这个坑我之前踩过!问题出在Android的字符串格式化规则上——当你把$和格式化参数(比如%d)紧挨着写的时候,系统会把$当成占位符的序号标记(比如%1$d表示第一个参数转成整数),而不是普通的美元符号,所以才会失效。
下面给你两种最实用的解决方式:
方法一:转义美元符号
在strings.xml里,用\$来表示普通的美元符号,这样系统就不会把它当成格式化语法的一部分了:
<string name="price_format">\$%d</string>
在代码里调用时和平时一样:
// 传入价格数值,比如10 String formattedPrice = getString(R.string.price_format, 10); // 最终输出:$10
如果是需要保留两位小数的价格,只需要调整格式化参数:
<string name="price_float_format">\$%.2f</string>
方法二:拆分占位符(适合多语言场景)
如果你的APP需要适配多语言,担心转义符在某些语言下出问题,可以把美元符号作为单独的占位符传入:
<string name="price_multi_placeholder">%1$s%2$d</string>
调用时传入美元符号和价格:
String formattedPrice = getString(R.string.price_multi_placeholder, "$", 10);
这种方式的好处是,后续如果要切换成其他货币符号(比如€),直接修改传入的符号即可,不用改strings.xml。
为什么有空格的时候能正常工作?
当你写$ %d时,$是独立的普通字符,和后面的格式化参数%d完全分开,系统不会把它和格式化语法混淆,所以能正常输出$ 10。
内容的提问来源于stack exchange,提问作者Sam Ramezanli
相关产品推荐
相关产品推荐

