通过代码获取res里生成R.java中的值

简介: 引用:http://my.eoe.cn/blue_rain/archive/552.html 有的时候我们生成库文件,需要在里面加入一些UI,并提供出一些xml的资源,那如何在其他项目中使用呢? 我们只需要在需要生成库文件的代码中不要直接是用R. ,而是使用自己写的方法获取。

引用:http://my.eoe.cn/blue_rain/archive/552.html

有的时候我们生成库文件,需要在里面加入一些UI,并提供出一些xml的资源,那如何在其他项目中使用呢?

我们只需要在需要生成库文件的代码中不要直接是用R. ,而是使用自己写的方法获取。

下面上代码:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import java.lang.reflect.Field;

import android.content.Context;
import android.util.Log;

public class ResUtil {
     private static final String TAG = ResUtil.class.getName();
      private static ResUtil instance;
      private Context context;
      private static Class id= null;
      private static Class drawable = null;
      private static Class layout = null;
      private static Class anim = null;
      private static Class style = null;
      private static Class string = null;
      private static Class array = null;

      private ResUtil(Context paramContext)
      {
        this.context = paramContext.getApplicationContext();
        try
        {
            drawable = Class.forName(this.context.getPackageName() + ".R$drawable");
        }
        catch (ClassNotFoundException localClassNotFoundException1)
        {
          Log.i(TAG, localClassNotFoundException1.getMessage());
        }
        try
        {
            layout = Class.forName(this.context.getPackageName() + ".R$layout");
        }
        catch (ClassNotFoundException localClassNotFoundException2)
        {
          Log.i(TAG, localClassNotFoundException2.getMessage());
        }
        try
        {
          id = Class.forName(this.context.getPackageName() + ".R$id");
        }
        catch (ClassNotFoundException localClassNotFoundException3)
        {
          Log.i(TAG, localClassNotFoundException3.getMessage());
        }
        try
        {
            anim = Class.forName(this.context.getPackageName() + ".R$anim");
        }
        catch (ClassNotFoundException localClassNotFoundException4)
        {
          Log.i(TAG, localClassNotFoundException4.getMessage());
        }
        try
        {
            style = Class.forName(this.context.getPackageName() + ".R$style");
        }
        catch (ClassNotFoundException localClassNotFoundException5)
        {
          Log.d(TAG, localClassNotFoundException5.getMessage());
        }
        try
        {
            string = Class.forName(this.context.getPackageName() + ".R$string");
        }
        catch (ClassNotFoundException localClassNotFoundException6)
        {
          Log.d(TAG, localClassNotFoundException6.getMessage());
        }
        try
        {
            array = Class.forName(this.context.getPackageName() + ".R$array");
        }
        catch (ClassNotFoundException localClassNotFoundException7)
        {
          Log.d(TAG, localClassNotFoundException7.getMessage());
        }
      }

      public static ResUtil getResofR(Context paramContext)
      {
        if (instance == null)
            instance = new ResUtil(paramContext);
        return instance;
      }

      public int getAnim(String paramString)
      {
        return getResofR(anim, paramString);
      }

      public int getId(String paramString)
      {
        return getResofR(id, paramString);
      }

      public int getDrawable(String paramString)
      {
        return getResofR(drawable, paramString);
      }

      public int getLayout(String paramString)
      {
        return getResofR(layout, paramString);
      }

      public int getStyle(String paramString)
      {
        return getResofR(style, paramString);
      }

      public int getString(String paramString)
      {
        return getResofR(string, paramString);
      }

      public int getArray(String paramString)
      {
        return getResofR(array, paramString);
      }

      private int getResofR(Class<?> paramClass, String paramString)
      {
        if (paramClass == null)
        {
          Log.d(TAG, "getRes(null," + paramString + ")");
          throw new IllegalArgumentException("ResClass is not initialized.");
        }
        try
        {
          Field localField = paramClass.getField(paramString);
          int k = localField.getInt(paramString);
          return k;
        }
        catch (Exception localException)
        {
          Log.d(TAG, "getRes(" + paramClass.getName() + ", " + paramString + ")");
          Log.d(TAG, "Error getting resource. Make sure you have copied all resources (res/) from SDK to your project. ");
          Log.d(TAG, localException.getMessage());
        }
        return -1;
      }
}

使用方法:在要生成库文件的Java文件中,使用

1
2
View view = getLayoutInflater().inflate(ResUtil.getResofR(this).getLayout("activity_main"), null);
        set
相关文章
|
2月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
86 1
|
2天前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
85 11
|
6天前
|
JSON Java 数据挖掘
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
|
2月前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
94 38
|
24天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
46 3
|
2月前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
62 24
|
1月前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
66 2
|
1月前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
88 5
|
1月前
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
69 5
|
2月前
|
Java API 开发者
Java中的Lambda表达式:简洁代码的利器####
本文探讨了Java中Lambda表达式的概念、用途及其在简化代码和提高开发效率方面的显著作用。通过具体实例,展示了Lambda表达式如何在Java 8及更高版本中替代传统的匿名内部类,使代码更加简洁易读。文章还简要介绍了Lambda表达式的语法和常见用法,帮助开发者更好地理解和应用这一强大的工具。 ####