仅使用特定的 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(我认为这是你这个问题的意图)。
对不起标题,无法描述我正在尝试做的事情。我一直对整个 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(我认为这是你这个问题的意图)。