我正在尝试从strings.xml执行以下操作获取值为“Hello”的字符串的ID:
getContext().getResources().getIdentifier("Hello", "string", getContext().getPackageName());
它返回0.为什么返回0?
答案 0 :(得分:4)
因为您传递了字符串 value ,所以您应该传递字符串的资源名称。
查看方法签名:getIdentifier(String name, String defType, String defPackage)
。
如果找不到资源,则会返回0
,这与您遇到的情况一致。
修改强>
不鼓励使用getIdentifier()
- 引用参考文献:
注意:不鼓励使用此功能。按标识符检索资源比按名称检索资源要高效得多。
我不知道根据相关字符串的值获取字符串ID的直接方法。但是我看到了两个解决方法/黑客:
将要执行查找的所有字符串命名为:stringN
其中N
是例如每个字符串递增的基于0的整数。你最终会得到像string0
,string1
等丑陋的名字。然后你自己进行查找 - 你迭代N
,创建字符串ID:stringN
,得到它的价值并检查匹配。我认为这很难看。
使用Typed Array资源并将所有字符串放在那里。它与方法1基本相同,但避免产生令人讨厌的污染资源名称。
答案 1 :(得分:1)
如果Manifest中的包名称不同,您因为包名称不正确而无法获取标识符,为了动态获取资源的正确包名,您应该使用:
String rPackageName = mContext.getResources().getResourcePackageName(R.some.wellKnownResource);
' rPackageName'是您应该传递给函数的包名称
getIdentifier(String name, String defType, String defPackage)