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