Android 通过字符串资源名获取资源id

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/ITjianghuxiaoxiong/article/details/80893790