Android - getIdentifier总是返回0(库+应用程序)

时间:2012-09-12 19:06:32

标签: android resources

我有Android项目(com.appocaliptic.quizknife.app),它使用Android库(com.appocaliptic.quizknife.core)。

我想要做的是获取图片库的资源ID。图像的路径是: res / drawable-xhdpi / fr_200_133.png

但是,所有尝试使用getIdentifier结果为0.问题出在哪里?

resId = getResources().getIdentifier("fr_200_133", "drawable", "com.appocaliptic.quizknife.core");
resId = getResources().getIdentifier("com.appocaliptic.quizknife.core:drawable/"+"fr_200_133", null, null);
resId = getResources().getIdentifier("drawable/fr_200_133", null, "com.appocaliptic.quizknife.core");

编辑:

Ach,在R.java中有drawable和corensponding属性。

5 个答案:

答案 0 :(得分:32)

我遇到了同样的问题:“getIdentifier result 0”我通过删除图片扩展名(* .jpg,* .jpeg,...等)来解决它以匹配名称在 R.java 文件

答案 1 :(得分:29)

您不应该使用库包名称。试试这个:

resId = getResources().getIdentifier("fr_200_133", "drawable", getPackageName());

(或getContext().getPackageName()如果在视图中执行此操作。)

关键是您需要使用应用程序的软件包名称(如清单中所列)而不是库的软件包名称(在创建应用程序时实际上会消失)。

答案 2 :(得分:11)

我得到了同样的错误,唯一有用的是以不同的方式解决它:

resourceId = R.drawable.class.getField("fr_200_133").getInt(null);

答案 3 :(得分:4)

我有类似的问题。我可以像Hussam Otri提到的那样解决它。例如:

//This doesn't work
context.getResources().getIdentifier("audio_1.mp3", "raw", this.getPackageName()); 

//This works (strip off the file extension)
context.getResources().getIdentifier("audio_1", "raw", this.getPackageName());

答案 4 :(得分:0)

图片的名称是下划线(下划线)或“ _”,我可以 因为编译器在编译“ imag_0001”后将照片的名称重命名为示例:来源:“ img0001”。