在运行时从位图列表中选择可绘制对象的简洁方法?
Clean way of selecting drawable from a list of bitmaps at runtime?
所以我有一个国家/地区 ISO 代码列表("US"、"UK"、"AU"...),我想根据 ISO 使用不同的可绘制对象我得到的代码。现在我的解决方案是使用一个大的 switch 语句
switch(iso){
case "AU":
icon = R.drawable.al_au;
etc...
这似乎很笨拙而且是不好的做法。有更清洁的方法吗?我唯一的另一个想法是从 iso 代码中形成可绘制的名称并使用反射,但我认为那会非常低效。
如果您的可绘制对象可以遵循命名约定,那么您可以这样做
要获取 Drawable
对象本身:
iconDrawable = getResources().getDrawable(
getResouces().getIdentifier("al_" + iso.toLowerCase(),
"drawable", getPackageName()));
仅获取 Drawable
标识符:
icon = getResouces().getIdentifier(
"al_" + iso.toLowerCase(), "drawable", getPackageName());
只是想添加一个 hacky-hacky 的东西 :) 只要您可以提供连续名称的排序列表,您就可以将一个项目的索引添加到第一个项目。
icon = R.drawable.al_au + Arrays.asList("AU","PL","US").indexOf(iso);
所以我有一个国家/地区 ISO 代码列表("US"、"UK"、"AU"...),我想根据 ISO 使用不同的可绘制对象我得到的代码。现在我的解决方案是使用一个大的 switch 语句
switch(iso){
case "AU":
icon = R.drawable.al_au;
etc...
这似乎很笨拙而且是不好的做法。有更清洁的方法吗?我唯一的另一个想法是从 iso 代码中形成可绘制的名称并使用反射,但我认为那会非常低效。
如果您的可绘制对象可以遵循命名约定,那么您可以这样做
要获取 Drawable
对象本身:
iconDrawable = getResources().getDrawable(
getResouces().getIdentifier("al_" + iso.toLowerCase(),
"drawable", getPackageName()));
仅获取 Drawable
标识符:
icon = getResouces().getIdentifier(
"al_" + iso.toLowerCase(), "drawable", getPackageName());
只是想添加一个 hacky-hacky 的东西 :) 只要您可以提供连续名称的排序列表,您就可以将一个项目的索引添加到第一个项目。
icon = R.drawable.al_au + Arrays.asList("AU","PL","US").indexOf(iso);