从值获取资源ID

时间:2010-10-11 08:14:45

标签: android resources

我确实有很多语言特定的资源。我的Android应用程序中有一点我获得了资源值,需要将此值转换为匹配的ID。该值不一定在当前语言的语言特定文件中(en / de / ...)。它就在那里...而且它是独一无二的。

在阅读了文档和这个帖子“How to get a resource id with a known resource name?”后,我认为getIdentifier(String name, String defType, String defPackage)是正确的方法,但我无法让它发挥作用。结果始终为“0”。

此代码是活动的一部分,我在Android 2.2上。

Android是否可能不考虑所有资源文件并仅使用当前特定语言进行搜索?

例如(当前语言为“de”):

File: values-en/strings.xml
<resources>
   <string name="txt_afirsttext">A first text</string>
   <string name="txt_asecondtext">A second text</string>
</resources>

File: values-de/strings.xml
<resources>
   <string name="txt_afirsttext">Ein erster Text</string>
   <string name="txt_asecondtext">Ein zweiter Text</string>
</resources>

// Now I want to find the ID to this "en" text ...
String testValue = "A second text";
int i = this.getResources().getIdentifier(testValue, "strings", this.getPackageName());

// ... and translate it to the actual "de" language
String translatedValue = this.getResources().getString(i);

说清楚。我不想错过使用字符串资源作为数据库。它只是在非常罕见的情况下发生的一部分。

2 个答案:

答案 0 :(得分:29)

您使用 getIdentifier 错误。在您的情况下,您不会指定文本,而是指定文本的标识符 txt_afirsttext txt_asecondtext

int i = this.getResources().
             getIdentifier("txt_asecondtext", "string", this.getPackageName());

我认为无法通过其内容找到String资源标识符。这就像传递一个字节流来定位一个drawable。

您的应用程序是否真的需要这种奇怪的获取资源的方法?我很确定你可以使用更好的方法动态加载资源,虽然你的第一段描述你的场景是一个神秘的场景:)

编辑:答案已修复。感谢tdroza的纠正。

答案 1 :(得分:11)

对上面的代码示例进行了一个小但重要的更正:资源类型必须是单数而不是复数。即“字符串”而不是“字符串” - 同样适用于drawable,id,array等。

E.g。

int i = this.getResources().getIdentifier(testValue, "string", this.getPackageName());