安卓 TextView:不要使用 setText 连接显示的文本

208

我正在使用以下方式通过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,并获得了对上述两行代码的建议。

enter image description here

不要将要显示的文本与setText拼接在一起。而是应该使用带占位符的资源字符串。 less... (Ctrl+F1)

在调用TextView#setText:时:

  • 永远不要调用Number#toString()来格式化数字;它无法正确处理小数分隔符和特定于语言环境的数字。考虑改用String#format以及适当的格式规范(%d或%f)。
  • 不要将字符串字面值(例如“Hello”)传递给显示文本。硬编码的文本无法正确翻译成其他语言。请考虑使用Android资源字符串。
  • 不要通过连接文本块来构建消息。这种消息无法正确翻译。

针对此问题,我应该怎么做?请问有人能帮忙解释这是什么意思以及我应该怎么做吗?


2
这意味着你应该只传递一个 StringsetText() 方法中。例如:使用 setText(name) 而不是 setText("" + name)。因为如果你连接文本,它将不会像使用硬编码文本一样被翻译为消息通知。 - Neo
但如果“name”为“NULL”,它将会给出“NPE”。 - Pratik Butani
在使用 setText() 函数之前,检查 name 是否为空。 - Neo
4
在字符串资源中不应该与某些值拼接字符串,而是应该使用占位符。在你的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文件中进行格式化:[http://developer.android.com/guide/topics/resources/string-resource.html]) - CodeBreakers
14个回答

1
prodNameView.setText("" + name); //this produce lint error

val nameStr="" + name;//workaround for quick warning fix require rebuild
prodNameView.setText(nameStr);

0

如果您不需要支持i18n,您可以在Android Studio中禁用此lint检查

文件 -> 设置 -> 编辑器 -> 检查 -> Android -> Lint -> TextView国际化(取消勾选)


或者使用@SuppressLint("SetTextI18n")来采用更为温和的方法。 - SVP

0

我知道我回答这个问题已经很晚了,但我认为您可以先将数据存储在一个变量中,然后再提供变量名称。例如:

// Java syntax
    String a = ("" + name);
    String b = "" + String.format(getString(R.string.string_product_rate_with_ruppe_sign);
    String c = "" + new BigDecimal(price).setScale(2, RoundingMode.UP));
    
    prodNameView.setText(a);
    prodOriginalPriceView.setText(b, c);

-1
如果是textView,你可以这样使用:myTextView.text = ("Hello World") 如果是editText,你可以使用myTextView.setText("Hello World")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接