在运行时从位图列表中选择drawable的干净方法?

时间:2015-01-20 15:11:35

标签: android resources drawable

所以我已经获得了国家ISO代码列表(" US"," UK"," AU" ...)我想要根据我给出的ISO代码,使用不同的drawable。现在我的解决方案就是使用大的switch语句

switch(iso){
    case "AU":
    icon = R.drawable.al_au;
etc...

这似乎是笨拙和糟糕的做法 - 是的。这样做有更干净的方法吗?我唯一的另一个想法就是从iso代码中形成可绘制的名称并使用反射,但我相信这样效率非常低。

2 个答案:

答案 0 :(得分:2)

如果您的drawable可以遵循命名约定,那么您可以执行类似

的操作

获取Drawable对象本身:

iconDrawable = getResources().getDrawable(
                   getResouces().getIdentifier("al_" + iso.toLowerCase(),
                                        "drawable", getPackageName()));

仅获取Drawable标识符:

icon = getResouces().getIdentifier(
           "al_" + iso.toLowerCase(), "drawable", getPackageName());

答案 1 :(得分:0)

只是想添加一个hacky-hacky的东西:)只要你能提供一个连续名字的排序列表,你就可以在第一个项目中添加一个项目的索引。

icon = R.drawable.al_au + Arrays.asList("AU","PL","US").indexOf(iso);