1

我想以编程方式设置 ImageView,将本地资源可绘制的名称作为字符串传递。

以这种方式清楚地识别可绘制对象

 R.drawable.mydrawable_name

如果不在条件开关中映射所有内容,我该如何解决这个问题?

我想避免这种形式的东西

if(myString.equal"stringname_1"){
   myImageview.setImageResource( R.drawable.stringname_1);
}
else if(myString.equal"stringname_1")....
etc
4

3 回答 3

11

您可以使用 getResources().getIdentifier() ( http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier(java.lang.String , java.lang.String, java.lang .String)) 用于此目的。对于您的代码,它看起来像这样:

int id = getResources().getIdentifier(myString, "drawable", getPackageName());
Drawable drawable = getResources().getDrawable(id);
myImageview.setImageDrawable(drawable);

上面的代码假设你在一个活动中。

于 2013-07-03T17:44:08.217 回答
1

你可以使用java反射来做到这一点

        Field field = R.drawable.class.getDeclaredField("mydrawable_name");

        int a = field.getInt(this);

a 的 id 值为R.drawable.mydrawable_name。现在您可以使用此 id 设置图像

于 2013-07-03T17:56:56.090 回答
0

请注意:下面需要对已接受的答案进行评论,但我没有添加评论的特权。

getDrawable(id)现在已弃用,我们可以使用

getDrawable(int id, Resources.Theme theme)

返回与特定资源 ID 关联并针对指定主题设置样式的可绘制对象。

getTheme返回当前主题。

示例如下:

Drawable drawable = resources.getDrawable(id, context.getTheme());
于 2017-03-28T11:43:46.080 回答