从值获取资源ID

Har*_*elm 10 resources android

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

在阅读了文档和这个帖子" 如何获取具有已知资源名称的资源ID? "后,我认为这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);
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ues 29

您使用的是getIdentifier错误.您没有指定文本,而是指定文本的标识符,在您的情况下将是txt_afirsttexttxt_asecondtext.

int i = this.getResources().
             getIdentifier("txt_asecondtext", "string", this.getPackageName());
Run Code Online (Sandbox Code Playgroud)

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

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

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


小智 11

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

例如

int i = this.getResources().getIdentifier(testValue, "string", this.getPackageName());
Run Code Online (Sandbox Code Playgroud)