You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin跨平台:如何从Resource自建文件夹而非Drawable加载图片?

嘿,我来帮你搞定这个问题!

首先得明确一个关键点:Android的资源编译系统只会识别res目录下特定命名的子文件夹(比如drawable、mipmap、raw、values这些官方定义的类型),如果你自己在res下新建了比如res/my_custom_images/这类非标准目录,系统不会把它当成资源目录,自然没法通过R类引用里面的图片。下面给你两种可行的解决方案:

方案一:用Assets目录存放自定义文件夹的图片

这是处理自定义资源文件夹最常用的方式,步骤很简单:

  1. 在main目录下创建assets文件夹(如果还没有的话),然后在assets里新建你的自定义文件夹,比如assets/my_images/,把图片放进去。
  2. 通过AssetManager读取文件夹里的图片,代码示例:

Kotlin 代码

// 获取AssetManager实例
val assetManager = context.assets
// 打开自定义文件夹里的图片文件
val inputStream = assetManager.open("my_images/live.png")
// 解码成Bitmap并设置到ImageView
val bitmap = BitmapFactory.decodeStream(inputStream)
imageView.setImageBitmap(bitmap)

Java 代码

// 获取AssetManager实例
AssetManager assetManager = getAssets();
// 打开自定义文件夹里的图片文件
InputStream inputStream = assetManager.open("my_images/live.png");
// 解码成Bitmap并设置到ImageView
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);

方案二:在标准资源目录下建子文件夹(推荐)

如果你不想用Assets,也可以在官方认可的资源目录(比如drawable)下创建子文件夹,比如res/drawable/my_images/,把图片放进去。这种情况下,系统会自动把这些图片当成普通的drawable资源,你可以直接用R类引用——注意:Android会忽略子文件夹的层级,所以不同子文件夹里的图片不能重名,否则会编译冲突。

引用代码和你之前用Drawable的方式完全一致:

// Kotlin
imageView.setImageResource(R.drawable.live)
// Java
imageView.setImageResource(R.drawable.live);

额外小技巧:用Raw目录存放图片

如果你的图片不需要适配不同分辨率,也可以把它们放到res/raw/目录下(或者在raw下建子文件夹,但同样系统会忽略层级,文件名要唯一),然后通过openRawResource读取:

val inputStream = resources.openRawResource(R.raw.live)
val bitmap = BitmapFactory.decodeStream(inputStream)
imageView.setImageBitmap(bitmap)

内容的提问来源于stack exchange,提问作者Huy Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:35:33