如何动态访问strings.xml中的值?

时间:2011-06-23 21:22:53

标签: java android

我想要做的是动态地从strings.xml获取特定文本。我认为它将涉及动态访问对象变量。 会有一个像:

这样的功能
public void getDynamicString(int level) {
  text.setText(R.string.levelText_+level);
}

strings.xml中会有<string name="levelText_5">Text level 5</string>

我宁愿不创建包含所有文本资源的列表。可以用Java / Android做到这一点。

5 个答案:

答案 0 :(得分:2)

使用Resources类的方法getIdentifier(name, defType, defPackage)按名称获取资源的id。然后你可以从同一个班级做一个正常的getString(id)

编辑:谷歌的一点点透露:this。你可以在那里找到样品用法。

答案 1 :(得分:0)

尝试:getResources().getString(R.id.stringId)

答案 2 :(得分:0)

您所要做的就是致电

this.getString(R.string.levelText_5)

如果您在可以访问上下文或应用程序的程序区域中,例如ListAdapter调用:

context.getString(R.string.levelText_5)

application.getString(R.string.levelText_5)

如果您无权访问上下文或应用程序,请致电:

getResources().getString(R.String.levelText_5);

动态调用:

String name = "levelText_"+level;
int id = getIdentifier(name, "string", "com.test.mypackage");
getResources().getString(id);

答案 3 :(得分:0)

您应该查看使用Resources类的getIdentifier(String, String, String)

答案 4 :(得分:0)

我有同样的问题,我用这个

修复了它

okey,无论何时你想动态地从strings.xml访问一个字符串,我的意思是避免使用getResources()。getString(R.id.stringId),你创建一个你可以动态操作的字符串但是你想在我们的情况下uriq(“愚蠢的变量名”),然后你创建资源对象,在我的示例level_res并初始化它然后你使用这个方法称为getIdentifier()接受你的动态字符串作为参数,现在你简单将您的ressource传递给方法getstring(mysttring)

 String uriq="level"+level_num;
 level_res=getResources();
 int mystring=getResources().getIdentifier(uriq,"string",getPackageName());
 String level=level_res.getString(mystring);