android通过字符串获取ResourceId

来源:互联网 发布:linux下utf8转gbk 编辑:程序博客网 时间:2024/06/16 07:22

在 封装框架 编译jar文件中 有一个 应用场景,在不引入 包名的情况下 获取资源文件的 id

为什么 不能引入包名呢? 因为 如果在jar文件中 使用了 例如以下代码

setContentView(R.layout.activity_main);

就会 自动导入一个 已app包名为路径 的 一个名字为R的 类

import com.demo.po.R;

如果 android 的项目工程 没有这样的包名 或者module 自然就会报错了 (找不到 R文件)

回到正题 如何 解决呢?直接上 硬菜

/** * 获取资源在r文件中的标示 *  * @param context * @param resName * @param resType * @return */public static int getIndentifier(Context context, String resName,String resType) {return context.getResources().getIdentifier(resName, resType,context.getPackageName());}public static int getLayoutIndentifier(Context context, String layoutName) {return getIndentifier(context, layoutName, "layout");}public static int getIDIndentifier(Context context, String idName) {return getIndentifier(context, idName, "id");}public static int getStyleIdentifier(Context context, String styleName) {return getIndentifier(context, styleName, "style");}public static int getDrawableIdentifier(Context context, String drawableName) {return getIndentifier(context, drawableName, "drawable");}public static int getStringIdentifier(Context context, String drawableName) {return getIndentifier(context, drawableName, "string");}

补充 另外一种方式:反射

 /*    *@parama variableName 例如: drawable;string     *@param clas 例如:R.drawable.class;R.string.class     *     * */    public int getResId(String variableName, Class<?> clas) {        try {            Field idField = clas.getDeclaredField(variableName);            return idField.getInt(idField);        } catch (Exception e) {            e.printStackTrace();            return -1;        }    }


阅读全文
0 0
原创粉丝点击