Android 反射-换一种方式编程
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/59109933
本文出自【赵彦军的博客】
上一次写了一篇文章 Java 反射 使用总结 , 今天算是对反射的补充,只不过把反射用到了Android层面上。
首先创建工具类 ResourceUtils
package com.app.fanse; import android.content.Context; import android.graphics.drawable.Drawable; public class ResourceUtils { public static int getIdByName(Context context, String className, String name) { return context.getResources().getIdentifier(name, className, context.getPackageName()); } /** * 获取布局文件的资源ID * @param context * @param name * @return */ public static int getIdFromLayout(Context context, String name) { return getIdByName(context, "layout", name); } /** * 从控件中获取资源的ID * @param context * @param name * @return */ public static int getIdFromId(Context context, String name) { return getIdByName(context, "id", name); } /** * 从 strings.xml 里面获取资源的ID * @param context * @param name * @return */ public static int getIdFromString(Context context, String name) { return getIdByName(context, "string", name); } /** * 从 Drawable 里面获取资源的ID * @param context * @param name * @return */ public static int getIdFromDrawable(Context context, String name) { return getIdByName(context, "drawable", name); } /** * 从 Mipmap 里面获取资源的ID * @param context * @param name * @return */ public static int getIdFromMipmap(Context context, String name) { return getIdByName(context, "mipmap", name); } /** * 从 strings.xml 里面获取字符串 * @param context * @param name * @return */ public static String getResString(Context context, String name) { return context.getString(getIdFromString(context, name)); } /** * 从Drawable目录获取 Drawable 对象 * @param context * @param name * @return */ public static Drawable getDrawableFromString(Context context, String name ){ return context.getResources().getDrawable( getIdFromDrawable( context , name ) ) ; } /** * 从Mipmap目录获取 Drawable 对象 * @param context * @param name * @return */ public static Drawable getMipmapFromString(Context context, String name ){ return context.getResources().getDrawable( getIdFromMipmap( context , name ) ) ; } }
工具类的使用
首先新建布局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.app.fanse.MainActivity"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <ImageView android:id="@+id/image" android:layout_below="@id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
然后创建MainActivity
package com.app.fanse; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView textView ; private ImageView imageView ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //获取布局文件id int layoutID = ResourceUtils.getIdFromLayout( this , "activity_main" ) ; setContentView( layoutID ); //获取TextView 的 id textView = (TextView) findViewById( ResourceUtils.getIdFromId( this , "tv")); //获取 strings.xml 中的字符串 textView.setText( ResourceUtils.getResString( this , "tv_des")); //获取ImageView 的 id imageView = (ImageView) findViewById( ResourceUtils.getIdFromId( this , "image")); //获取 Mipmap 里面的 Drawable imageView.setImageDrawable( ResourceUtils.getMipmapFromString( this , "ic_launcher")); //获取 Drawable 里面的 Drawable imageView.setImageDrawable( ResourceUtils.getDrawableFromString( this , "ic_launcher")); } }
那么效果怎么样呢?请看效果图
个人微信号:zhaoyanjun125
, 欢迎关注

来源:https://www.cnblogs.com/zhaoyanjun/p/6484767.html