如何将String转换为Drawable

时间:2014-02-18 14:07:48

标签: android android-drawable android-background

我在drawable文件夹中有很多图标,我的名字是String。如何访问drawable文件夹并更改背景imageView(或任何视图)动态使用这些名称。谢谢

6 个答案:

答案 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);