【发布时间】:2019-12-14 00:38:21
【问题描述】:
我试过了:
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 传递它。
最后,我想用一个变量替换"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() 作为参数。
【问题讨论】:
-
根据
Resources.getSystem()的文档:"返回一个全局共享资源对象,该对象仅提供对系统资源(无应用程序资源)的访问权限,并且未配置对于当前屏幕(不能使用尺寸单位,不会根据方向改变等)。” 正如@Sajmon 回答的那样,您需要将Context实例传递给您的(静态)助手方法来访问特定于应用程序的资源。 -
顺便说一句,类型方面区分大小写,例如“字符串”、“可绘制”而不是“字符串”或“可绘制”