仅使用特定的 String 变量打开资源文件

Open a resource file just with specific String variable

对不起标题,无法描述我正在尝试做的事情。我一直对整个 Java 有这个问题,但现在,它是针对 Android 的。假设我正在解析一个 API 并得到这个特殊的字符串,比方说 "clear"。在我的可绘制对象中,我有一个 clear.jpg,我想以编程方式将其设置为 ImageView。那不是困难的部分。我想知道的是,是否有一种快速方法可以让我仅使用变量名称调用 .jpg?我知道我可以很容易地做出不同的 if 语句,例如:

if(string == "clear")
{
    //setImageView to drawable/clear
}

但是无论如何我可以做一些事情,比如

//setImageView to drawable/string

哪里的字符串会很清楚?我知道它显然会在 drawable 中寻找一个字符串,但无论如何我可以做我正在描述的事情吗?我有一个一般性的问题;这是我一直想知道的事情。

告诉我!谢谢!

private void showImage() {
    String uri = "drawable/icon";

    // int imageResource = R.drawable.icon;
    int imageResource = getResources().getIdentifier(uri, null, getPackageName());

    ImageView imageView = (ImageView) findViewById(R.id.myImageView);
    Drawable image = getResources().getDrawable(imageResource);
    imageView.setImageDrawable(image);
}

否则,我会建议您使用 R.* 引用,如下所示:

int imageResource = R.drawable.icon;
  Drawable image = getResources().getDrawable(imageResource);

参考 -> Android - Open resource from @drawable String

据我所知,调用该图片的最快方法是将

xml 文件中的图片名称;例如,如果你想改变背景

图像视图,您可以将下面的代码放入 xml 文件中

android:background="@drawable/clear"。

请注意图像必须位于可绘制文件夹中。谢谢,希望对您有所帮助。

看起来 Java 8 提供 limited support for local variable annotations, but its reflection API can't give you access within method bodies. So you'd need to parse the class file itself. And for that, a library like ASM 就可以了。

if(string.equals("clear")){
  int resID = getResources().getIdentifier("clear", "drawable", getPackageName());
  imageView.setBackgroundResource(resID);
}

在使用getIdentifier方法时与其他点相同。

imageView.setImageView(getResources().getIdentifier(string, "drawable", 
            getPackageName()));

但是,通过这样做,你可以在没有if-condition块的情况下处理,直接指定一个来自string的值的Drawable(我认为这是你这个问题的意图)。