有時候我們想動態的根據一個字符串資源名獲得到對應的資源id,如根據不同的圖片名稱獲得對應的圖片,此時就應該考慮如何實現.
大家知道,在編譯Android工程時,系統會自動生成一個靜態資源類R,里面根據不同的資源類型有不同的靜態內部類,如id,drawable等等,而每個內部類中存放的是對應的16進制的靜態資源id屬性,而這些屬性的屬性名就是資源名.常用的方法有兩個:
方法一:
利用getResources().getIdentifier(String name,String defType,String defPackage) 獲取
public int getResource(String imageName){ Context ctx=getBaseContext(); int resId = getResources().getIdentifier(imageName, "mipmap", ctx.getPackageName()); //如果沒有在"mipmap"下找到imageName,將會返回0
return resId; }
方法二:
使用反射機制獲取
public int getResource(String imageName){ Class mipmap = R.mipmap.class; try { Field field = mipmap.getField(imageName); int resId = field.getInt(imageName); return resId; } catch (NoSuchFieldException e) {//如果沒有在"mipmap"下找到imageName,將會返回0
return 0; } catch (IllegalAccessException e) { return 0; } }
PS:根據資源id獲取資源名稱:
String resName = getResources().getResourceName(resId);
作者:
caobotao
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利。