您的位置:首页 > 移动开发 > Android开发

Android 获取有规律资源Id解决方案

2015-10-04 23:20 543 查看
在多个有规律的资源ID获取的时候,可以使用getIdentifier方法来获取,来获取。

用到场景:工具类打成.jar包的时候,有时候会需要引用到res中的资源,这时候不能将资源一起打包,只能通过反射机制动态的获取资源.

public class Resources int getIdentifier (String name, String defType, String defPackage)
Return a resource identifier for the given resource name.
param defType:"layout","string","drawable","style","color","array"


Parameters
nameThe name of the desired resource.
defTypeOptional default resource type to find, if "type/" is not included in the name. Can be null to require an explicit type.
defPackageOptional default package to find, if "package:" is not included in the name. Can be null to require an explicit package.
Returns

int The associated resource identifier. Returns 0 if no such resource was found. (0 is not a valid resource ID.)

from: http://developer.android.com/reference/android/content/res/Resources.html[/code] 
  

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倍。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: