标签:
在多个有规律的资源ID获取的时候,可以使用getIdentifier方法来获取,来获取。
用到场景:工具类打成.jar包的时候,有时候会需要引用到res中的资源,这时候不能将资源一起打包,只能通过反射机制动态的获取资源.
param defType:"layout","string","drawable","style","color","array"
name | The name of the desired resource. |
---|---|
defType | Optional default resource type to find, if "type/" is not included in the name. Can be null to require an explicit type. |
defPackage | Optional default package to find, if "package:" is not included in the name. Can be null to require an explicit package. |
from: http://developer.android.com/reference/android/content/res/Resources.html
public static int getDrawableId(Context paramContext, String paramString) { return paramContext.getResources().getIdentifier(paramString, "drawable", paramContext.getPackageName()); }
对于这个方法,官方不推荐:
Note: use of this function is discouraged. It is much more efficient to retrieve resources by identifier than by name.
更好的解决方案,是参照另外一篇博客的使用反射实现的。
http://www.liaohuqiu.net/cn/posts/android-get-resource-id-by-string/
示例代码:
public static int getResId(String variableName, Class<?> c) { try { Field idField = c.getDeclaredField(variableName); return idField.getInt(idField); } catch (Exception e) { e.printStackTrace(); return -1; } }
使用:
int id = ResourceMan.getResId("icon", R.drawable.class);
这种效率据说比第一种高了4倍。
标签:
原文地址:http://www.cnblogs.com/spring87/p/4855186.html