android通过反射获得资源数据

来源:互联网 发布:中国旅游业发展数据 编辑:程序博客网 时间:2024/06/05 23:02

import android.content.Context;
import android.content.res.Resources;

import com.zlongame.utils.LogUtils.PDLog;

/**
* 在不能使用id的情况下 通过使用反射获取数据
*/
public class ResourcesUtil {
private static String mPackageName;//接入游戏的包名
private static Resources mResources;//接入游戏的包名

public static void init(Context context){    mPackageName=context.getApplicationContext().getPackageName();    mResources=context.getApplicationContext().getResources();}public static int getLayout(String resName){    return mResources.getIdentifier(resName, "layout", mPackageName);}public static int getDrawable(String resName){    return mResources.getIdentifier(resName, "drawable", mPackageName);}public static int getString(String resName){    return mResources.getIdentifier(resName, "string", mPackageName);}public static int getId(String resName){    return mResources.getIdentifier(resName, "id", mPackageName);}public static int getStyle(String resName){    return mResources.getIdentifier(resName, "style", mPackageName);}public static int getArray(String resName){    return mResources.getIdentifier(resName, "array", mPackageName);}public static int getColor(String resName){    return mResources.getIdentifier(resName, "color", mPackageName);}public static int getDimen(String resName){    return mResources.getIdentifier(resName, "dimen", mPackageName);}public static int getAnim(String resName){    return mResources.getIdentifier(resName, "anim", mPackageName);}public static int getRaw(String resName){    return mResources.getIdentifier(resName, "raw", mPackageName);}public static int getStyleable(String resName){    return mResources.getIdentifier(resName, "styleable", mPackageName);}public static int[] getStyleableArray(String resName){    return getResourceIDsByName(resName,"styleable",mPackageName);}/** * 利用反射,获取int数组格式的资源ID,例如styleable */private static int[] getResourceIDsByName(String resName,String resType,String packageName){    Class clsR = null;    int[] ids = null;    try {        clsR = Class.forName(packageName + ".R");        Class[] classes = clsR.getClasses();        Class desClass = null;        for(int i=0;i<classes.length;i++){            String[] temp = classes[i].getName().split("\\$");            if(temp.length >= 2){                if(temp[1].equals(resType)){                    desClass = classes[i];                    break;                }            }        }        if(desClass != null){            ids = (int[])desClass.getField(resName).get(resName);        }    } catch (Exception e) {        PDLog.e(e);    }    return ids;}

}

0 0