学习Android利用反射获取资源文件

来源:互联网 发布:js判断对象是否为null 编辑:程序博客网 时间:2024/06/05 03:05

     公司需要开发一款SDK,代码部分要做成jar文件,那么R文件就没办法引用啦。再也没办法愉快的使用findviewbyid(R.id.XX);获取控件了。去google了一下,发现大神们都可以用反射拿到res里面想要的一切资源。我就学来试用下。把下面的方法封装成一个类,直接用静态方法调用就可以拿到int型的资源引用了。

/** *code by xiaonan */public class ResUtil {     public static int getLayoutId(Context paramContext, String paramString) {         return paramContext.getResources().getIdentifier(paramString, "layout",                 paramContext.getPackageName());     }      public static int getStringId(Context paramContext, String paramString) {         return paramContext.getResources().getIdentifier(paramString, "string",                 paramContext.getPackageName());     }      public static int getDrawableId(Context paramContext, String paramString) {         return paramContext.getResources().getIdentifier(paramString,                 "drawable", paramContext.getPackageName());     }          public static int getStyleId(Context paramContext, String paramString) {         return paramContext.getResources().getIdentifier(paramString,                 "style", paramContext.getPackageName());     }          public static int getId(Context paramContext, String paramString) {         return paramContext.getResources().getIdentifier(paramString,"id", paramContext.getPackageName());     }          public static int getColorId(Context paramContext, String paramString) {         return paramContext.getResources().getIdentifier(paramString,                 "color", paramContext.getPackageName());     }     public static int getArrayId(Context paramContext, String paramString) {         return paramContext.getResources().getIdentifier(paramString,                 "array", paramContext.getPackageName());     } } 

     使用方法很简单。如果你有布局文件需要引用,那就直接使用ResUtil.getLayoutId(this,"activity_main");就可以拿到layout的布局引用了。如果你在布局里面做了一个TextView,那么你就可以这样操作这个控件。以下是一个简单的小栗子。

    <TextView        android:id="@+id/tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" />
     上面这是布局文件,在java文件里如果想操作控件就按照下面的方法使用就可以了

        TextView tv = (TextView) findViewById(ResUtil.getId(this, "tv"));        tv.setText("你就说6不6");
     用法很简单。实际上在getresources().getidentifier()方法中Google已经替我们做好了反射,我们只是利用了包名+资源名称获取到了资源的引用。这样获取控件可以很大程度上解决在jar包中无法引用res资源的问题。具体原理我也不太懂,我还是个菜鸟。但是这里先记录下使用方法。以后肯定也用的上。
     

1 0
原创粉丝点击