使用Android getIdentifier()

Hou*_*man 50 java android

我试过这个:

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

还有这个:

r = Resources.getSystem().getIdentifier("com.Juggle2:drawable/ball_red", null, null);
Run Code Online (Sandbox Code Playgroud)

但'r'总是最终为零.

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

最终,我想"ball_red"用变量替换,但首先是第一件事.这不起作用.

com.Juggle2确实是我的包名.drawableres它所在的文件夹,确实是文件的名称ball_red.

R.java说:

        public static final int ball_red=0x7f020027;
Run Code Online (Sandbox Code Playgroud)

所以我不确定它为什么不起作用.


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

class Collection extends SurfaceView implements SurfaceHolder.Callback {
Run Code Online (Sandbox Code Playgroud)

我正在创建我的类的新实例并将其getContext()作为参数传递.

Fes*_*loe 132

因为你在一个活动里面就足够了

int resId = YourActivity.this.getResources().getIdentifier(
    "ball_red",
    "drawable",
    YourActivity.this.getPackageName()
);
Run Code Online (Sandbox Code Playgroud)

或者如果你不是从内部阶级调用它

int resourceID = getResources().getIdentifier(
    "ball_red",
    "drawable",
    getPackageName()
);
Run Code Online (Sandbox Code Playgroud)

注意

getIdentifier() Returns 0 if no such resource was found. (0 is not a valid resource ID.)
Run Code Online (Sandbox Code Playgroud)

校验

检查你的R.java是否有drawable名字ball_red

例如:

public static final class drawable {
        public static final int ball_red = 0x7f020000;
 }
Run Code Online (Sandbox Code Playgroud)

编辑 如果您没有参加任何活动,那么您必须通过,context instead of resources as parameter然后执行此操作

int resId = context.getResources().getIdentifier(
    "ball_red",
    "drawable",
    context.getPackageName()
);
Run Code Online (Sandbox Code Playgroud)


Cra*_*ion 5

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

Xamarin将允许您这样做(即使您不应该这样做),但是当应用程序被编译时,名称被展平为小写,因此您必须引用小写变体,如下所示:

Image Name: iconVaccine.png

Xamarin reference: iconVaccine (as created in Resource.designer.cs, but will fail)

Correct Reference: iconvaccine
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!