有没有办法即时生成 R.drawable.... 名称?我想使用动态生成的名称设置背景图像(已经可以用作R.drawable.example_graphic
)
所以我想找到一种方法将字符串分配给 $ABC ->btn.setBackgroundImage(R.drawable.$ABC);
我不想创建一个新的drawable,我想使用现有的。
是的。可绘制对象在编译时是常量:您确切知道存在什么。因此,在您的 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));
正如@CommonsWare 所分享的,我已经找到了解决方案。
getContext().getResources().getIdentifier("flags_"+country, "drawable","mypackage")
但是,它可能需要缓存,因为它使用反射。
因此,创建一个静态 HashMap 来保留 ResourceName 及其来自 getIdentifier 函数(整数)的结果似乎是一个好主意;对同一 ResourceName 的进一步使用只会从 HashMap 中获取值,而不是再次使用反射。