从字符串获取资源 ID 和字符串引用
许多 Android 开发场景需要将资源 ID 和相应的字符串传递给方法。例如,您可能会遇到像 R.drawable.icon 这样的引用,并且需要它的整数 ID 和字符串“icon”。
解决方案 1:使用 Resources.getIdentifier()
Android Studio 提供了一种高效的方法,称为 Resources.getIdentifier()。该函数以字符串、包名、资源类型为参数,返回对应的资源ID。可以使用 getPackageName() 获取包名称。对于上述示例,代码为:
int resId = getResources().getIdentifier("icon", "drawable", getPackageName()); String resString = "icon";
解决方案 2:使用反射
在 Android Studio 引入 Resources.getIdentifier() 之前,反射通常用于实现此功能。以下代码演示了这种方法:
public static int getResId(String resName, Class<?> c) { try { Field idField = c.getDeclaredField(resName); return idField.getInt(idField); } catch (Exception e) { e.printStackTrace(); return -1; } }
它可以按如下方式使用:
int resId = getResId("icon", R.drawable.class); String resString = "icon";
性能注意事项
根据一些来源,Resources.getIdentifier() 的执行速度比基于反射的方法更快。但是,需要注意的是,反射方法在某些 Android 构建场景中可能会失败,特别是在启用代码和资源收缩时。
以上是如何从字符串中高效检索 Android 资源 ID 和字符串引用?的详细内容。更多信息请关注PHP中文网其他相关文章!