码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2015-10-04 23:33:02      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:

在多个有规律的资源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
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.
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

  

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

 

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

标签:

原文地址:http://www.cnblogs.com/spring87/p/4855186.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!