如何在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);