版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ITjianghuxiaoxiong/article/details/80893790
在开发中我们可能遇到这样的需求,通过后台返回一个资源名,然后加载res下的资源文件,比如推送状态栏加载指定资源名的图片等,可以通过反射的机制获取。所以与大家分享一个工具类。
package com.ml512.common.utils;
import java.lang.reflect.Field;
/**
* 资源操作工具类
* <p>
* create by malong at 2018/6/22 17:15
*/
public class ResourceUtil {
/**
* 通过字符串资源名的方式获取资源id
*
* @param clazz R.drawable.class
* @param name 资源名 例ic_launcher_background
* @return int
*/
public static int getResIdByString(Class clazz, String name) {
if (name == null) {
return 0;
}
int resId = 0;
try {
Field field = clazz.getField(name);
resId = (Integer) field.get(clazz.newInstance());
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
return resId;
}
}
使用如下:
helloTextView.setBackgroundResource(ResourceUtil.getResIdByString(R.drawable.class, "ic_launcher_background"));//获取drawable id
helloTextView.setText(ResourceUtil.getResIdByString(R.string.class, "text_test"));//获取string id