使用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_red
的drawable
例如:
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。