zoukankan      html  css  js  c++  java
  • Android 获取有规律资源Id解决方案

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

     

  • 相关阅读:
    python导入数据的几种方法
    sql 如何删除(代替)字段内某一部分内容
    SQL Server如何将查询的内容保存到新的sql 表中
    sqlserver 计算同比,环比增长
    SQLlite实现增删查改
    如何实现基于框架的选课系统的质量属性
    实验1.2:框架选择及其原因
    期末考试复习c#时总结的抽象类与接口的一些区别
    <<梦断代码>>读书笔记
    结对开发首尾相接数组求子数组最大和
  • 原文地址:https://www.cnblogs.com/spring87/p/4855186.html
Copyright © 2011-2022 走看看