美文网首页
[转]学习Android利用反射获取资源文件

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

作者: 努力与幸运 | 来源:发表于2018-09-26 16:56 被阅读30次

本文来自 StrangeNightmare 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/StrangeNightmare/article/details/52704199?utm_source=copy

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


相关文章

网友评论

      本文标题:[转]学习Android利用反射获取资源文件

      本文链接:https://www.haomeiwen.com/subject/cekjoftx.html