我想用程序设置ImageView,将本地资源drawable的名称传递为String。
以这种方式可以清楚地识别可绘制内容
R.drawable.mydrawable_name
如果不在条件开关中映射所有内容,我该如何解决这个问题?
我想避免这种形式的
if(myString.equal"stringname_1"){
myImageview.setImageResource( R.drawable.stringname_1);
}
else if(myString.equal"stringname_1")....
etc
您可以使用getResources().getIdentifier()(http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String、java.lang.Sstring、java.lang.String))。对于你的代码,它看起来像这样:
int id = getResources().getIdentifier(myString, "drawable", getPackageName());
Drawable drawable = getResources().getDrawable(id);
myImageview.setImageDrawable(drawable);
上面的代码假设您处于"活动"中。
您可以使用java反射
Field field = R.drawable.class.getDeclaredField("mydrawable_name");
int a = field.getInt(this);
a将具有id值CCD_ 1。现在您可以使用此id设置图像
Pl注意:下面需要对接受的答案进行注释,但我没有添加注释的权限。
getDrawable(id)
现在已弃用,我们可以使用
getDrawable(int id, Resources.Theme theme)
返回与特定资源ID相关联的可绘制对象,并为指定主题设置样式。
getTheme
返回当前主题。
样品如下:
Drawable drawable = resources.getDrawable(id, context.getTheme());