在我的应用程序中,我需要在某些地方获取一些位图drawable,我不想保留引用R
。所以我创建了一个类DrawableManager
来管理drawables。
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.?
}
}
然后我希望在某个地方得到drawable(car.png放在res / drawables中):
Drawable d= DrawableManager.getDrawable("car.png");
但是正如您所看到的,我无法通过名称访问资源:
public static Drawable getDrawable(String name) {
return R.drawable.?
}
任何替代方案?
答案 0 :(得分:136)
请注意,您的方法几乎总是错误的做事方式(最好将上下文传递给使用drawable的对象本身,而不是在某处保留静态Context
。)
鉴于此,如果您想进行动态可绘制加载,可以使用getIdentifier:
Resources resources = context.getResources();
final int resourceId = resources.getIdentifier(name, "drawable",
context.getPackageName());
return resources.getDrawable(resourceId);
答案 1 :(得分:21)
你可以这样做.-
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"
....
答案 2 :(得分:6)
修改图片内容:
ImageView image = (ImageView)view.findViewById(R.id.imagenElement);
int resourceImage = activity.getResources().getIdentifier(element.getImageName(), "drawable", activity.getPackageName());
image.setImageResource(resourceImage);
答案 3 :(得分:1)
使用Kotlin
fun Context.getResource(name:String): Drawable? {
val resID = this.resources.getIdentifier(name , "drawable", this.packageName)
return ActivityCompat.getDrawable(this,resID)
}
我将其编写为扩展函数,因此可以在代码中的任何位置使用它。
注意:在Java中,已弃用context.getResources().getDrawable(resourceId);
。
注意:文件名,是不带扩展名的文件,例如前“ a.png” 的名称将为“ a” 。>
答案 4 :(得分:0)
如果您需要int资源
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("eskb048", "drawable",context.getPackageName());
// return like: R.drawable.eskb048.png
如果需要可绘制 检查第一个答案是否正确
答案 5 :(得分:0)
您可以这样实现
int resourceId = getResources().getIdentifier("your_drawable_name", "drawable", getPackageName());
在Imageview中设置 resourceId
imageView.setImageResource(resourceId);