从代码中引用字符串资源

Posted

技术标签:

【中文标题】从代码中引用字符串资源【英文标题】:Reference string resource from code 【发布时间】:2012-05-28 18:17:07 【问题描述】:

我在 strings.xml 中声明了以下字符串:

<string name="last_msg">Your last click was on</string>

现在当有人点击一个按钮时,我想要一个文本视图来显示这个字符串,有一个空格,然后是一个变量值,它是一个时间戳

不幸的是,使用 @string/last_msg 不起作用,我不确定如何正确执行此操作,因此我没有对内容进行硬编码。

这是我的 onClick 函数代码:

public void showMsgNow(View view) 
    TextView lastMsg = (TextView)findViewById(R.id.textView2);
    long currentTimeStamp = System.currentTimeMillis();
    lastMsg.setText(@string/last_msg + " " + currentTimeStamp);

我是新手,任何帮助都会很棒!

【问题讨论】:

在发布问题之前先在 google/web 上搜索,这是您甚至可以在文档中找到的简单内容。 【参考方案1】:

我在谷歌上找到了答案:

getString(R.string.last_msg)

【讨论】:

澄清一下,这里是android.content.Context#getString【参考方案2】:

你不能直接通过@ 访问String,因为你需要有上下文资源然后才这样做......

lastMsg.setText(context.getResources().getString(R.string.last_msg) + " " + currentTimeStamp);

在你的情况下使用

<string name="last_msg">Your last click was on %1$s</string>

实施:

public void showMsgNow(View view) 
    TextView lastMsg = (TextView)findViewById(R.id.textView2);
    long currentTimeStamp = System.currentTimeMillis();
    lastMsg.setText(context.getResources()
        .getString(R.string.last_msg, currentTimeStamp));

【讨论】:

【参考方案3】:
// getString is method of context
if (this instanceof Context) 
//If you are in Activity or Service class            
 lastMsg.setText(getString(R.string.last_msg)+ " " + currentTimeStamp);
else                         
//you need to context to get the string 
  lastMsg.setText(getString(mContext,R.string.last_msg)+ " " + currentTimeStamp);


  public String getString(Context mContext, int id)
     return mContext.getResources().getString(id);
  

【讨论】:

所以我不需要使用getString函数?? 当我不使用 getString 函数时,它只是作为整数而不是字符串出现... 这里不用用,在android R中是Resource类,所有存放在raw文件夹中的资源在R类中都有id String myString = lastMsg.getString().toString(); 这不起作用,因为 R.string.last_msg 是 int,您不能将 String 添加到 int。您至少必须使用 getString()。有关示例,请参见@Ankit 的答案。【参考方案4】:

使用下面的行

 lastMsg.setText(getString(R.string.last_msg) + " " + currentTimeStamp);

【讨论】:

【参考方案5】:

试试这个:

lastMsg.setText(R.string.last_msg + " " + new SimpleDateFormat(d-MM-YYYY).format(new Date()));

【讨论】:

以上是关于从代码中引用字符串资源的主要内容,如果未能解决你的问题,请参考以下文章

自定义从 Html 字符串引用的图像

Android,从字符串中获取资源ID?

从 DLL 文件中读取资源

对象引用未设置为从代码中更改 app.config 中连接字符串的对象实例 [重复]

C#中资源文件的动态引用

Android TextView控件显示Html文本,并引用的资源文件String。