Android 反射-换一种方式编程

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"));
}
}

那么效果怎么样呢?请看效果图

Android 反射-换一种方式编程


个人微信号:zhaoyanjun125 , 欢迎关注

Android 反射-换一种方式编程

上一篇:linux学习笔记 yum 在线管理软件包


下一篇:(求租仓库)navigationController .navigationBar 的属性设置