对于下面的代码,我打算获取系统日期并根据当前语言环境的格式显示它,它只是R.string.date
的格式。在模拟器中,它总是显示为长数字(类似于821302314),而不是“Date:”,我已经在string.xml
中进行了外化。任何人都可以帮忙看看为什么会这样吗?
final TextView mTimeText = (TextView)findViewById(R.id.mTimeText);
//get system date
Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText(R.string.date + " " + dateFormat.format(date));
<TextView
android:id="@+id/mTimeText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/date"
/>
<string name="date">Date:</string>
答案 0 :(得分:12)
R.string.date
确实是int
,您错过了对getText()
或getString()
的调用:
mTimeText.setText(getText(R.string.date) + " " + dateFormat.format(date));
更好的是,不要在代码中构建字符串,而是使用getString(int resId, Object... formatArgs)
的模板:
mTimeText.setText(getString(R.string.date, dateFormat.format(date)));
和您的string.xml
:
<string name="date">Date: %s</string>
答案 1 :(得分:7)
是的,如果使用R.string.date,您将获得String的ID。 如docs
中所述您可以使用getString(int)或getText(int)来检索字符串。 getText(int)将保留应用于字符串的任何富文本样式。
示例:
this.getString(R.string.date);
在此处阅读:getString
答案 2 :(得分:5)
要从xml获取字符串值,您应该调用this.getString(R.id.nameOfString)
。在您的情况下,这将是mTimeText.setText(this.getString(R.string.date) + " " + dateFormat.format(date));
答案 3 :(得分:0)
将所有&#34; R.string。*&#34; 覆盖为&#34; getString(R.string。)&#34; *我写了一点正则表达式。
这个正则表达式也忽略了已经拥有&#34; getString&#34;在前面。
((?!getString\() R\.string\.[a-zA-Z1-9_]+)
您只需在Android Studio中按Strg + Shift + R打开替换终端并将上面的正则表达式插入&#34;查找&#34;和&#34;替换&#34;下面的正则表达式。
getString\( $1 \)
别忘了设置&#34;正则表达&#34;复选框。
对我而言,这完美无缺。但是&#34; Find Regex&#34;遇到一个问题,只有当它以空格开头时才能找到R.string。我不知道如何解决这个问题,因为如果我删除了空格,那么找到已经拥有&#34; getString&#34;的R.string。
可能有些人可以帮助改进正则表达式,或者有更好的方法来实现这一点。