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非常有趣,我使用了菜单Analyze -> Code Cleanup
并在上面两行提出了build议。
不要连接用setText显示的文本。 使用占位符的资源string。 less…(Ctrl + F1)
当调用TextView#setText时:
- 切勿调用Number#toString()来格式化数字; 它不会正确处理分数分隔符和区域特定的数字。 考虑使用具有适当格式规范(%d或%f)的String#格式。
- 不要传递string(例如“Hello”)来显示文本。 硬编码文本无法正确翻译成其他语言。 考虑使用Android资源string。
- 不要通过连接文本块来构build消息。 这样的消息不能被正确翻译。
我能为此做些什么? 任何人都可以帮助解释事情是什么,我该怎么办?
Resource具有getString的get重载版本,它接受一个Object
的varargs
: getString(int,java.lang.Object …) 。 如果在strings.xml中使用正确的占位符正确设置了string,则可以使用此版本检索最终string的格式化版本。 例如
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
使用getString(R.string.welcome_message, "Test", 0);
android会返回一个String
Hello Test! you have 0 new messages
关于 setText("" + name);
你的第一个例子, prodNameView.setText("" + name);
对我没有任何意义。 TextView能够处理空值。 如果name为null,则不会绘制文本。
我遇到了同样的错误消息,并通过这种方式解决。
最初我的代码是这样的:
private void displayQuantity(int quantity) { TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view); quantityTextView.setText("" + quantity); }
我得到错误“不要连接文本显示与setText。使用资源string与占位符。 所以
我将其添加到strings.xml
<string name="blank">%d</string>
这是我最初的“”+我的号码(数量)的占位符。
注意:我的数量variables是以前定义的,并且是我想追加到string的。 在我写的Java代码中。
private void displayQuantity(int quantity) { TextView quantityTextView = (TextView) findViewById(R.id.quantity_text_view); quantityTextView.setText(getString(R.string.blank, quantity)); }
我的错误消失了 在应用程序的行为没有改变,我的数量继续显示,因为我想现在没有lint错误。
你应该检查这个线程,并使用像他的一个占位符(未testing)
<string name="string_product_rate_with_ruppe_sign">Price : %1$d</string> String text = String.format(getString(R.string.string_product_rate_with_ruppe_sign),new BigDecimal(price).setScale(2, RoundingMode.UP)); prodOriginalPriceView.setText(text);
问题是因为你在每个string的开头都追加""
。
lint将扫描传递给setText
参数,并将生成警告,在您的情况下,警告是相关的:
不要通过连接文本块来构build消息。 这样的消息不能被正确翻译。
因为您将每个string连接到""
。
删除这个连接,因为你传递的参数已经是文本了。 另外,如果在其他任何地方需要使用.toString()
,而不是将string连接到""