【发布时间】:2016-01-14 21:02:06
【问题描述】:
我正在通过以下方式使用 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 显示的文本。使用资源字符串 与占位符。少... (Ctrl+F1)
当调用 TextView#setText:
- 永远不要调用 Number#toString() 来格式化数字;它不会正确处理分数分隔符和特定于语言环境的数字。考虑 使用具有正确格式规范(%d 或 %f)的 String#format 反而。
- 不要传递字符串文字(例如“Hello”)来显示文本。硬编码文本无法正确翻译成其他语言。 考虑改用 Android 资源字符串。
- 不要通过连接文本块来构建消息。此类消息无法正确翻译。
为此我能做些什么?任何人都可以帮助解释这是什么以及我应该怎么做?
【问题讨论】:
-
这意味着您应该只将
String传递给setText()。例如:setText(name)而不是setText("" + name)。因为如果你连接文本,它不会像你使用硬编码文本作为消息通知那样被翻译 -
但是如果
name是NULL,它会给出NPE -
在使用
setText()函数之前检查name不是NULL。 -
您不应将字符串资源与某些值连接,而应在字符串资源中使用占位符。所以在你的 string.xml 你做:
<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 文件中进行格式化:[developer.android.com/guide/topics/resources/…
标签: android concatenation textview string-concatenation