如何使用本地资源的名称String设置ImageView,避免资源的条件映射



我想用程序设置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());

最新更新