android通过反射获得资源数据

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值