小编典典

Android TextView:“不要用 setText 连接显示的文本”

all

我通过以下方式使用 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 非常有趣,我使用了 Menu Analyze -> Code Cleanup,我得到了上面两行的建议。

在此处输入图像描述

不要连接使用 setText 显示的文本。将资源字符串与占位符一起使用。少… (Ctrl+F1)

调用 TextView#setText 时:

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

我能为此做些什么?任何人都可以帮助解释这是什么,我该怎么办?


阅读 66

收藏
2022-07-30

共1个答案

小编典典

Resource 具有 getString 的 get 重载版本,它采用以下varargs类型ObjectgetString(int,
java.lang.Object…)
。如果您在
strings.xml 中正确设置了字符串,并使用了正确的占位符,则可以使用此版本来检索最终字符串的格式化版本。例如

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

使用getString(R.string.welcome_message, "Test", 0);

android将返回一个字符串

 "Hello Test! you have 0 new messages"

关于 setText("" + name);

您的第一个示例prodNameView.setText("" + name);对我没有任何意义。TextView 能够处理空值。如果 name 为
null,则不会绘制任何文本。

2022-07-30