如何从字符串动态更改 ImageView 的来源?(Xamarin Android)

5
我正在使用Xamarin Android,尝试动态更改ImageView的src。所有图片都放置在Resource/drawable目录下。从xml中读取图片名称(string imgName = nameFromXml + ".jpg"),然后将其传递给我的ImageView。我想有两种好方法:
1)获取图像(int)id,并使用SetImageResource()将其传递给ImageView: myTextView.SetImageResource(????????); 2)获取图像的Uri
编辑 不幸的是,我无法像Eric的答案那样在QuinDa 问题上使用,因为在Xamarin Android中不存在许多仅在Android上工作的方法。

可能是通过字符串查找drawable的重复问题。 - Mike M.
包含图片名称的XML在哪里? - Code-Apprentice
5个回答

9

这里是标准的安卓方法:

int resImage = getResources().getIdentifier(imgName , "drawable", getPackageName());
myTextView.setImageResource(resImage);

请注意imgName变量不应包含文件扩展名。
Xamarin.Android C#:
int resImage = Resources.GetIdentifier(imgName, "drawable", PackageName);

是的,我已经尝试过这种方法,但resImage始终为0。 - Masciuniria
1
我找到了另一种方法: int resourceId = (int)typeof(Resource.Drawable).GetField("myImageName").GetValue(null); 然后,只需: imageView.SetImageResource(resourceId); - Masciuniria
我还注意到,当名称包含大写字母时,图像不会被捕获,请确保所有文本都是小写。 - Christo Nel
如果我们有两个名称相同但扩展名不同的drawable怎么办?我们可以有一个image.jpg和一个矢量图像.xml。 - CDrosos

4

感谢SushiHangover和Romuald的回答,但我想分享另一种经过测试且看起来效果良好的方法。

以下是我获取资源ID的步骤:

int resourceId = (int)typeof(Resource.Drawable).GetField("myImageName").GetValue(null);

那么,我就可以使用正常的SetImageResource():

imgViewCondition.SetImageResource(resourceId);

2
仅仅是这样:
FindViewById<ImageView>(Resource.Id.imageviewName).SetImageResource(Resource.Drawable.nameofimage);

2
以下代码片段解决了该问题:
int id = getResources().getIdentifier("XXX", "drawable", getPackageName());
imageView.setImageResource(id);

2

我知道这是一个老问题,但帮助别人从来不会有害。

图片应该在资源文件夹中存储所有适用于Android的正确大小(drawable-hdpi, drawable-ldpi...),

然后你可以通过以下方式动态获取它:

imageView.SetImageResource(Resource.Drawable.YourImageNameHere);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接