R.string.value显示为数字

时间:2011-09-26 15:11:23

标签: android date-format

对于下面的代码,我打算获取系统日期并根据当前语言环境的格式显示它,它只是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));

layout.xml

<TextView 
android:id="@+id/mTimeText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"   
android:text="@string/date"
/>

的strings.xml

<string name="date">Date:</string>

4 个答案:

答案 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。

可能有些人可以帮助改进正则表达式,或者有更好的方法来实现这一点。