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;
}
}