Как преобразовать строку в Drawable

У меня есть много значков в папке drawable, и у меня есть их имя как строка. Как я могу получить доступ к папке drawable и изменить фоновое изображение (или любое представление), используйте это имя динамически. Спасибо

6 ответов


Это можно сделать с помощью отражения:

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)

int resId = getResources().getIdentifier("your_drawable_name","drawable",YourActivity.this.getPackageName());
Drawable d = YourActivity.this.getResources().getDrawable(resId);

Это можно сделать так:

ImageView imageView = new ImageView(this);
imageView.setBackground(getResources().getDrawable(getResources().getIdentifier("name","id",getPackageName())));

попробуйте это:

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;
    }
}

Если у вас есть имя файла в виде строки, вы можете использовать:

int id = getResources().getIdentifier("name_of_resource", "id", getPackageName());

С этим идентификатором вы можете получить к нему доступ, как всегда (предполагается, что его можно нарисовать):

Drawable drawable = getResources().getDrawable(id);

используйте случай, если не в какой-либо деятельности, используя @ 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);