将资源 ID 传递给方法时,通常需要访问 ID 和相应的字符串。例如,考虑“图标”资源:
R.drawable.icon
要获取 ID 和字符串“图标”,可以探索多种方法:
一种解决方案涉及利用资源。 getIdentifier() 方法:
int resID = getResources().getIdentifier("icon", "drawable", getPackageName()); String iconString = "icon";
但是,最近的研究表明 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); // or other resource class String iconString = "icon";
尽管这种反射方法可能更有效,但重要的是要注意潜在的缺点。在启用了代码/资源收缩的发布版本中,此解决方案可能会失败。此外,如果字符串名称与预期的资源名称格式不同,它可能不起作用。
以上是如何从字符串名称中高效获取Android资源ID?的详细内容。更多信息请关注PHP中文网其他相关文章!