如何动态定义R.drawable的名称

时间:2013-03-01 14:33:15

标签: android image resources drawable

有没有办法直接生成R.drawable ....名字?我想用动态生成的名称(已经可以用作R.drawable.example_graphic

设置背景图像

所以我想找到一种方法将字符串分配给$ ABC - > btn.setBackgroundImage(R.drawable.$ABC);

我不想创建一个新的drawable,我想使用现有的。

2 个答案:

答案 0 :(得分:3)

是。 Drawable在编译时是常量:你确切知道存在什么。因此,在Application对象中,创建一个map:

public static final Map<String, Integer> NAMED_RESOURCES;
static {
  Map<String, Integer> m = new HashMap<String, Integer>();
  m.put(KEY1, R.drawable.ABC);
  m.put(KEY2, R.drawable.DEF);
  // ...
  NAMED_RESOURCES = Collections.unmodifiableMap(m);
}

现在你可以:

btn.setBackgroundImage(Application.NAMED_RESOURCES.get($ ABC));

答案 1 :(得分:1)

我找到了解决方案,正如@CommonsWare所共享的那样。

getContext().getResources().getIdentifier("flags_"+country, "drawable","mypackage")

但是,它可能需要缓存,因为它使用反射。

因此,创建一个静态HashMap来保持ResourceName及其getIdentifier函数(整数)的结果似乎是一个好主意;进一步使用相同的ResourceName将只从HashMap获取值,而不是再次使用反射。