package com.cheng.utils; import android.content.Context; /** * R资源反射工具类 */ public final class RUtils { public static final String POINT = "."; public static final String R = "R"; public static final String JOIN = "$"; public static final String ANIM = "anim"; public static final String ATTR = "attr"; public static final String COLOR = "color"; public static final String DIMEN = "dimen"; public static final String DRAWABLE = "drawable"; public static final String ID = "id"; public static final String LAYOUT = "layout"; public static final String MENU = "menu"; public static final String RAW = "raw"; public static final String STRING = "string"; public static final String STYLE = "style"; public static final String STYLEABLE = "styleable"; /** * Don't let anyone instantiate this class. */ private RUtils() { throw new Error("Do not need instantiate!"); } /** * 获取动画ID * * @param context 上下文 * @param name 名称 */ public static int getAnim(Context context, String name) { try { return (Integer) Class .forName(context.getPackageName() + POINT + R + JOIN + ANIM) .getDeclaredField(name).get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取属性ID * * @param context 上下文 * @param name 名称 */ public static int getAttr(Context context, String name) { try { return (Integer) Class .forName(context.getPackageName() + POINT + R + JOIN + ATTR) .getDeclaredField(name).get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取颜色ID * * @param context 上下文 * @param name 名称 */ public static int getColor(Context context, String name) { try { return (Integer) Class .forName( context.getPackageName() + POINT + R + JOIN + COLOR) .getDeclaredField(name).get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取尺寸ID * * @param context 上下文 * @param name 名称 */ public static int getDimen(Context context, String name) { try { return (Integer) Class .forName( context.getPackageName() + POINT + R + JOIN + DIMEN) .getDeclaredField(name).get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取图片ID * * @param context 上下文 * @param name 名称 */ public static int getDrawable(Context context, String name) { try { return (Integer) Class .forName( context.getPackageName() + POINT + R + JOIN + DRAWABLE).getDeclaredField(name) .get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取ID * * @param context 上下文 * @param name 名称 */ public static int getId(Context context, String name) { try { return (Integer) Class .forName(context.getPackageName() + POINT + R + JOIN + ID) .getDeclaredField(name).get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取布局ID * * @param context 上下文 * @param name 名称 */ public static int getLayout(Context context, String name) { try { return (Integer) Class .forName( context.getPackageName() + POINT + R + JOIN + LAYOUT).getDeclaredField(name).get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取菜单ID * * @param context 上下文 * @param name 名称 */ public static int getMenu(Context context, String name) { try { return (Integer) Class .forName(context.getPackageName() + POINT + R + JOIN + MENU) .getDeclaredField(name).get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取RAW ID * * @param context 上下文 * @param name 名称 */ public static int getRaw(Context context, String name) { try { return (Integer) Class .forName(context.getPackageName() + POINT + R + JOIN + RAW) .getDeclaredField(name).get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取字符串ID * * @param context 上下文 * @param name 名称 */ public static int getString(Context context, String name) { try { return (Integer) Class .forName( context.getPackageName() + POINT + R + JOIN + STRING).getDeclaredField(name).get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取样式ID * * @param context 上下文 * @param name 名称 */ public static int getStyle(Context context, String name) { try { return (Integer) Class .forName( context.getPackageName() + POINT + R + JOIN + STYLE) .getDeclaredField(name).get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } /** * 获取自定义属性组 * * @param context 上下文 * @param name 名称 */ public static int[] getStyleable(Context context, String name) { try { return (int[]) Class .forName( context.getPackageName() + POINT + R + JOIN + STYLEABLE).getDeclaredField(name) .get(null); } catch (Exception e) { e.printStackTrace(); return null; } } /** * 获取自定义属性 * * @param context 上下文 * @param styleableName 属性组名称 * @param attributeName 属性名称 */ public static int getStyleableAttribute(Context context, String styleableName, String attributeName) { try { return (Integer) Class .forName( context.getPackageName() + POINT + R + JOIN + STYLEABLE) .getDeclaredField(styleableName + "_" + attributeName) .get(null); } catch (Exception e) { e.printStackTrace(); return -1; } } }