【Android】解决TextView.setText提示Do not concatenate text displayed with setText. Use resource string

简介: 【Android】解决TextView.setText提示Do not concatenate text displayed with setText. Use resource string=

挖坑背景

在实际的项目开发过程中,我们会经常用到TextView.setText()方法,而在进行某些单位设置时,比如 设置时间xxxx年xx月xx日 或者设置 体重xx公斤* 时,大家一般都会使用如下写法:

1.// 设置显示当前日期
TextView tvDate = (TextView) findViewById(R.id.main_tv_date);
tvDate.setText("当前日期:" + year + "年" + month + "月" + day + "日");
// 设置显示当前体重数值
TextView tvWeight = (TextView) findViewById(R.id.main_tv_weight);
tvWeight.setText("当前体重:" + weight + "公斤");

那么...如果你是在Android Studio上进行开发的话,你在使用该方式进行文本设置时就会看到以下提示:




问题分析

Ok,相信上图的问题是绝大多数的强迫症患者、完美主义者所不能容忍的,那么我们就来看看它到底想要怎么做才能够不折磨咱们!!!先分析AS给出的提示信息:


 Do not concatenate text displayed with setText. Use resource string with placeholders. [less...](#lint/SetTextI18n) (Ctrl+F1 Alt+T)
请勿使用setText方法连接显示文本.用占位符使用字符串资源(提示我们尽量使用strings.xml的字符串来显示文本)。
When calling TextView#setText
当使用TextView#setText方法时
* Never call Number#toString() to format numbers; it will not handle fraction separators and  locale-specific digits
* 不使用Number#toString()格式的数字;它不会正确地处理分数分隔符和特定于地区的数字。
 properly. Consider using String#format with proper format specifications (%d or %f)  instead.
考虑使用规范格式(%d或%f)的字符串来代替。
* Do not pass a string literal (e.g. "Hello") to display  text. Hardcoded text can not be properly translated to
不要通过字符串文字(例如:“你好”)来显示文本。硬编码的文本不能被正确地翻译成其他语言。
 other languages. Consider using Android resource strings instead.
考虑使用Android资源字符串。
* Do not build  messages by concatenating text chunks. Such messages can not be properly  translated.
不要通过连接建立消息文本块。这样的信息不能被正确的翻译。

通过以上信息,我们可以得知:


不建议使用Numer.toString()的方式来进行字符串的转换,建议使用规范格式(%d或%f)的字符串来代替;

不建议直接使用字符串文字来直接显示文本,建议直接使用Android字符串资源;

不建议通过连接的方式显示消息文本块。

解决方法

通过上述对问题的分析解读,我们上述类似问题所引发的警告可以通过如下方式更规范化的使用TextView.setText()方法:


使用String.format方法

在strings.xml中进行如下声明(这里以日期设置为例)

<string name="current_time">当前日期:%1$d年%2$d月%3$d日</string>

在代码中这样使用

// 设置显示当前日期

TextView tvDate = (TextView) findViewById(R.id.main_tv_date);

tvDate.setText(String.format(getResources().getString(R.string.current_time),year,month,day));

String.format常用格式说明:

%n 代表当前为第几参数,使strings.xml中的位置与format参数的位置对应;

$s代表为字符串数值;$d代表为整数数值;$f代表为浮点型数值。

如:%1$d代表第一个参数,数值类型为整数。


使用Android字符串资源来替换字符串文字


目录
相关文章
|
3月前
|
开发工具 Android开发 git
解决Android AAPT: error: resource android:attr/lStar not found. 问题
解决Android AAPT: error: resource android:attr/lStar not found. 问题
222 0
|
3月前
|
Android开发
【Bug】Android resource linking failed和error: failed linking references.
【Bug】Android resource linking failed和error: failed linking references.
|
7天前
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
26 1
|
8天前
|
开发工具 Android开发
Android Studio resource linking failed
Android Studio resource linking failed
24 1
|
3月前
|
算法 Android开发
Compose - Text 详解,2024年Android社招面试题精选
Compose - Text 详解,2024年Android社招面试题精选
Compose - Text 详解,2024年Android社招面试题精选
|
2月前
|
XML IDE 开发工具
13. 【Android教程】文本框 TextView
13. 【Android教程】文本框 TextView
38 2
|
2月前
|
编解码 Android开发
Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
Android 解决TextView多行滑动与NestedScrollView嵌套滑动冲突的问题
28 0
|
3月前
|
Android开发
android TextView HTML 的效果
android TextView HTML 的效果
26 2
|
3月前
|
XML 搜索推荐 Java
Android TextView的字体设置
【5月更文挑战第13天】
103 0
|
3月前
|
Android开发
android string.xml文件中的整型和string型代替
android string.xml文件中的整型和string型代替
30 0