2

有没有办法即时生成 R.drawable.... 名称?我想使用动态生成的名称设置背景图像(已经可以用作R.drawable.example_graphic

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

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

4

2 回答 2

3

是的。可绘制对象在编译时是常量:您确切知道存在什么。因此,在您的 Application 对象中,创建一个地图:

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

于 2013-03-01T14:41:21.547 回答
1

正如@CommonsWare 所分享的,我已经找到了解决方案。

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

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

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

于 2013-03-01T14:50:23.023 回答