有没有办法直接生成R.drawable ....名字?我想用动态生成的名称(已经可以用作R.drawable.example_graphic
)
所以我想找到一种方法将字符串分配给$ ABC - > btn.setBackgroundImage(R.drawable.$ABC);
我不想创建一个新的drawable,我想使用现有的。
答案 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获取值,而不是再次使用反射。