我已经试过了:
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。
getResources()
SurfaceView
最终,我想"ball_red"用一个变量替换,但首先是第一件事。这不起作用。
"ball_red"
com.Juggle2确实是我的包裹名称。drawable是res它所在的文件夹,并且文件名的确是ball_red。
com.Juggle2
drawable
res
ball_red
R.java说:
public static final int ball_red=0x7f020027;
所以我不确定为什么它不起作用。
所以我不能使用资源,我必须传递一个上下文,并且我这样做是这样的:在这里:
class Collection extends SurfaceView implements SurfaceHolder.Callback {
我正在创建类的新实例,并将其getContext()作为参数传递。
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中检查是否有一个drawable名称为ball_red
例如:
public static final class drawable { public static final int ball_red = 0x7f020000; }
编辑 如果您不参加任何活动,则必须通过,context instead of resources as parameter然后执行此操作
context instead of resources as parameter
int resId = context.getResources().getIdentifier( "ball_red", "drawable", context.getPackageName() );