我正在使用以下方式通过setText()设置文本。
prodNameView.setText("" + name);
prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));
第一个是简单的使用,第二个是设置带格式的文本。
Android Studio非常有趣,我使用菜单Analyze -> Code Cleanup
,并获得了对上述两行代码的建议。
不要将要显示的文本与setText拼接在一起。而是应该使用带占位符的资源字符串。 less... (Ctrl+F1)
在调用TextView#setText:时:
- 永远不要调用Number#toString()来格式化数字;它无法正确处理小数分隔符和特定于语言环境的数字。考虑改用String#format以及适当的格式规范(%d或%f)。
- 不要将字符串字面值(例如“Hello”)传递给显示文本。硬编码的文本无法正确翻译成其他语言。请考虑使用Android资源字符串。
- 不要通过连接文本块来构建消息。这种消息无法正确翻译。
针对此问题,我应该怎么做?请问有人能帮忙解释这是什么意思以及我应该怎么做吗?
String
到setText()
方法中。例如:使用setText(name)
而不是setText("" + name)
。因为如果你连接文本,它将不会像使用硬编码文本一样被翻译为消息通知。 - NeosetText()
函数之前,检查name
是否为空。 - Neo<string name="string_product_rate_with_ruppe_sign">Something %1$d</string>
然后在你的Java代码中可以这样写:prodOriginalPriceView.setText(getString(R.string.string_product_rate_with_ruppe_sign), price);
(你也可以在xml文件中进行格式化:[http://developer.android.com/guide/topics/resources/string-resource.html]) - CodeBreakers