2014-02-18 2 views
4

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

ответ

21

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

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

Затем используйте это для установки рисуем в любом случае:

view.setBackground(drawable) 
+0

Должен ли я использовать 'view.setBackground (drawable)' или 'view.setBackgroundResource (id)' или что? –

+0

Я отредактировал свой ответ. –

+0

Большое спасибо. Это работа :) Все ответы верны –

1

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

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

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

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

'id' не будет работать в этом случае. –

+0

Спасибо. Ответ правильный –

5

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

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

Спасибо. Ответ тоже верный –

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

Спасибо. Я уверен, что это правда, но я не пробовал :) –

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

Спасибо. Этот ответ тоже верен –

0

использование cas е, если не в какой-либо деятельности, используя примеры @FD_

Примечание:

, если вы не в какой-либо деятельности, вы должны отправить контекстные параметры для того, чтобы использовать «GetResources()» или «getPackageName()», и «getDrawable (id)» устарел, вместо этого используйте getDrawer (int id, Theme theme). (Тема может быть пустым):

String name = "your_drawable"; 
int id = context.getResources().getIdentifier(name, "drawable", 
context.getPackageName()); 
Drawable drawable = context.getResources().getDrawable(id, null); 
Смежные вопросы