android – 从值获取资源ID

我确实有很多语言具体的资源.在我的 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);

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

解决方法

你正在使用getIdentifier错误.您不要指定文本,而是指定文本的标识符,在您的情况下,这将是txt_afirsttext或txt_asecondtext.
int i = this.getResources().
             getIdentifier("txt_asecondtext","string",this.getPackageName());

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

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

编辑:答案固定.感谢tdroza的纠正.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...