使用Android getIdentifier()

我试过这个:

r = Resources.getSystem().getIdentifier("ball_red","drawable","com.Juggle2"); Log.i("FindBall","R = "+r); 

和这个:

 r = Resources.getSystem().getIdentifier("com.Juggle2:drawable/ball_red", null, null); 

但'r'总是最终为零。

我从一个不是Activity的帮助类中调用这一行,并且没有扩展任何东西,所以我不能简单地调用getResources() ,但是我可以从我的SurfaceView传递它。

最后,我想用variablesreplace"ball_red" ,但首先是第一个。 这不起作用。

com.Juggle2确实是我的包名。 drawable是它所在的res文件夹,并且文件的名字确实是ball_red

R.java说:

  public static final int ball_red=0x7f020027; 

所以我不知道为什么它不工作。


所以我不能使用资源,我必须通过一个上下文,我这样做:在这里面:

 class Collection extends SurfaceView implements SurfaceHolder.Callback { 

我正在创build我的类的新实例,并将其作为parameter passing给getContext()

既然你是一个活动的内部就足够写了

 int resId=YourActivity.this.getResources().getIdentifier("ball_red", "drawable", YourActivity.this.getPackageName()); 

或者如果你不是从内部类来调用它的话

 int resourceID = getResources().getIdentifier("ball_red", "drawable", getPackageName()); 

注意

 getIdentifier() Returns 0 if no such resource was found. (0 is not a valid resource ID.) 

检查

在R.java中也检查是否有名为ball_reddrawable

例如:

 public static final class drawable { public static final int ball_red=0x7f020000; } 

编辑如果你不在任何活动,那么你必须传递一个context instead of resources as parameter然后执行此操作

 int resId=context.getResources().getIdentifier("ball_red", "drawable", context.getPackageName()); 

对于Xamarin的用户,我遇到了这个问题,我添加了一个小写和大写字母的图标(例如iconVaccine.png),并且指的是名字iconVaccine。

Xamarin将允许你这样做(即使你不应该这样做),但是当应用程序被编译时,这个名字被压扁成小写字母,所以你必须参考下面的小写变体:

图片名称:iconVaccine.png

Xamarin参考:iconVaccine(在Resource.designer.cs中创build,但将失败)

正确的参考:iconvaccine

希望有所帮助!

尽pipeFestus Tamakloe的回答是正确的,但我发现这个function有点怪异。

如果您在xml文件中声明了一个string-array ,则必须通过调用基本资源typesarray来访问它,方法是使用string-array返回0。