首页 >Java >java教程 >如何从字符串中高效检索 Android 资源 ID 和字符串引用?

如何从字符串中高效检索 Android 资源 ID 和字符串引用?

DDD
DDD原创
2024-12-20 12:56:141043浏览

How to Efficiently Retrieve Android Resource IDs and String References from a String?

从字符串获取资源 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn