android通過反射獲得資源資料
阿新 • • 發佈:2019-01-25
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; }
}