如何在Android中按名称访问可绘制资源
在我的应用程序中,我需要在某些不想保留引用R
位置绘制一些位图。 所以我创build了一个DrawableManager
类来pipe理drawable。
public class DrawableManager { private static Context context = null; public static void init(Context c) { context = c; } public static Drawable getDrawable(String name) { return R.drawable.? } }
然后我想在这个地方得到可绘制的名字(car.png放在res / drawables里面):
Drawable d= DrawableManager.getDrawable("car.png");
但是,正如您所看到的,我无法通过名称访问资源:
public static Drawable getDrawable(String name) { return R.drawable.? }
任何替代品?
请注意,您的方法几乎总是做错事情的方法(最好是将上下文传递到使用drawable的对象本身,而不是保持静态Context
某处)。
鉴于此,如果你想做dynamic可绘制加载,你可以使用getIdentifier :
Resources resources = context.getResources(); final int resourceId = resources.getIdentifier(name, "drawable", context.getPackageName()); return resources.getDrawable(resourceId);
你可以做这样的事情。
public static Drawable getDrawable(String name) { Context context = YourApplication.getContext(); int resourceId = context.getResources().getIdentifier(name, "drawable", YourApplication.getContext().getPackageName()); return context.getResources().getDrawable(resourceId); }
为了从任何地方访问上下文,你可以扩展Application类。
public class YourApplication extends Application { private static YourApplication instance; public YourApplication() { instance = this; } public static Context getContext() { return instance; } }
并将其映射到您的Manifest
application
标签中
<application android:name=".YourApplication" ....
修改图片内容:
ImageView image = (ImageView)view.findViewById(R.id.imagenElement); int resourceImage = activity.getResources().getIdentifier(element.getImageName(), "drawable", activity.getPackageName()); image.setImageResource(resourceImage);
- Android L(API 21) – java.lang.IllegalArgumentException:Service Intent必须是显式的
- SwipeRefreshLayout + ViewPager,仅限水平滚动?
- Android ==>内存分析==> Eclipse内存分析器?
- TimerTask与Thread.sleep vs Handler postDelayed – 每N毫秒最准确的调用函数?
- onResume()之前调用onActivityResult()吗?
- 视图animation之后为什么不设置可见性?
- 使EditText ReadOnly
- HTML:为什么Android浏览器在键盘上显示“Go”而不是“Next”?
- 是否有可能在android linearlayout的宽度上均匀分布button