影子:
在开发中我们经常会在代码中去设置TextView的文本。
- 在AS中你可能会遇到这样一个警告:Do not concatenate text displayed with setText. Use resource string with placeholders. (Ctrl + F1)
- 有道译文:不要将显示的文本与setText连接。使用带有占位符的资源字符串。在调用TextView.setText 时,不要调用Number.toString()来格式化数字;它不会正确处理分数分隔符和特定于区域的数字。考虑使用格式规范(%d或%f)的字符串#格式。不要传递字符串字面意思。“你好”)来显示文本。硬编码的文本不能正确地翻译成其他语言。可以考虑使用Android资源字符串。*不要通过连接文本块来构建消息。(译文可能有误差,请忽略掉)
警告原因AS已经说的很清楚了,现在我们看看如何解决。
解决格式规范(%d或%f)的字符串
常见格式的类似有:
-
%n$s
—>n表示目前是第几个参数 (比如%1$s
中的1代表第一个参数),s代表字符串 -
%n$d
—>n表示目前是第几个参数 (比如%1$d
中的1代表第一个参数),d代表整数 -
%n$f
—>n表示目前是第几个参数 (比如%1$f
中的1代表第一个参数),f代表浮点数
使用案列:
tv_Message.setText(String.format(getString(R.string.s_Message),1));
R.string.s_Message 内容:
<string name="s_Message ">这是第%d条消息</string>
好了,使用这种规范格式输出,恭喜你绿了不黄了。
妈妈再也不怕我是处女座了。
–2018/6/19
遇到类似<string name="s_Message ">进度为%d %</string>
这种格式的字符串时,需要把%写成%%。
String.format() 中单个%是会报错的,需要显示单个%时,用两个%代替。
<string name="s_Message ">进度为%d %%</string>