Xamarin跨平台:如何从Resource自建文件夹而非Drawable加载图片?
嘿,我来帮你搞定这个问题!
首先得明确一个关键点:Android的资源编译系统只会识别res目录下特定命名的子文件夹(比如drawable、mipmap、raw、values这些官方定义的类型),如果你自己在res下新建了比如res/my_custom_images/这类非标准目录,系统不会把它当成资源目录,自然没法通过R类引用里面的图片。下面给你两种可行的解决方案:
方案一:用Assets目录存放自定义文件夹的图片
这是处理自定义资源文件夹最常用的方式,步骤很简单:
- 在
main目录下创建assets文件夹(如果还没有的话),然后在assets里新建你的自定义文件夹,比如assets/my_images/,把图片放进去。 - 通过
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
相关产品推荐
相关产品推荐

