美文网首页
[转]学习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