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

新手上路,请多包涵

我通过以下方式使用 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 资源字符串。
  • 不要通过连接文本块来构建消息。此类消息无法正确翻译。

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

原文由 Pratik Butani 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 931
2 个回答

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,则不会绘制任何文本。

原文由 Blackbelt 发布,翻译遵循 CC BY-SA 4.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);

原文由 Ashish Sharma 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题