我在drawable文件夹中有很多图标,我的名字是String。如何访问drawable文件夹并更改背景imageView(或任何视图)动态使用这些名称。谢谢
答案 0 :(得分:23)
这可以使用反射来完成:
String name = "your_drawable";
final Field field = R.drawable.getField(name);
int id = field.getInt(null);
Drawable drawable = getResources().getDrawable(id);
或使用Resources.getIdentifier()
:
String name = "your_drawable";
int id = getResources().getIdentifier(name, "drawable", getPackageName());
Drawable drawable = getResources().getDrawable(id);
然后在任何一种情况下使用它来设置drawable:
view.setBackground(drawable)
答案 1 :(得分:7)
int resId = getResources().getIdentifier("your_drawable_name","drawable",YourActivity.this.getPackageName());
Drawable d = YourActivity.this.getResources().getDrawable(resId);
答案 2 :(得分:5)
可以这样做:
ImageView imageView = new ImageView(this);
imageView.setBackground(getResources().getDrawable(getResources().getIdentifier("name","id",getPackageName())));
答案 3 :(得分:3)
试试这个:
public Bitmap getPic (int number)
{
return
BitmapFactory.decodeResource
(
getResources(), getResourceID("myImage_" + number, "drawable", getApplicationContext())
);
}
protected final static int getResourceID
(final String resName, final String resType, final Context ctx)
{
final int ResourceID =
ctx.getResources().getIdentifier(resName, resType,
ctx.getApplicationInfo().packageName);
if (ResourceID == 0)
{
throw new IllegalArgumentException
(
"No resource string found with name " + resName
);
}
else
{
return ResourceID;
}
}
答案 4 :(得分:1)
如果你有文件名作为字符串,你可以使用:
int id = getResources().getIdentifier("name_of_resource", "id", getPackageName());
使用此ID,您可以像往常一样访问它(假设它是可绘制的):
Drawable drawable = getResources().getDrawable(id);
答案 5 :(得分:0)
使用案例,如果不在任何活动中,使用@FD_ examples
注意:
如果您不进行任何活动,则必须发送上下文参数才能使用“getResources()”或“getPackageName()”,并且不推荐使用“getDrawable(id)”,请使用getDrawer(int id,Theme theme) )而不是。 (主题可以为null):
String name = "your_drawable";
int id = context.getResources().getIdentifier(name, "drawable",
context.getPackageName());
Drawable drawable = context.getResources().getDrawable(id, null);