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

     公司需要开发一款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资源的问题。具体原理我也不太懂,我还是个菜鸟。但是这里先记录下使用方法。以后肯定也用的上。
     

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值