我试过这个:
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确实是我的包名.drawable是res它所在的文件夹,确实是文件的名称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)
对于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)
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
70467 次 |
| 最近记录: |