Как преобразовать строку в 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);