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

Xamarin.Android类库API21/22下Resources+NotFoundException问题求助

解决Xamarin.Android类库API21/22下资源找不到的异常

这个问题我之前在项目里也碰到过,核心原因是API21/22环境下,类库对带版本后缀的资源目录(比如drawable-v21)的加载逻辑和更高版本有差异,或者资源打包配置没做好。咱们一步步来排查解决:

先排查基础配置问题

  • 确认你的btn_XXXX.xml文件确实放在类库的Resources/drawable-v21目录下,并且Build Action设置为AndroidResource。Xamarin里如果这个属性不对,资源根本不会被打包进类库,自然找不到。
  • 清理整个解决方案,删除bin/obj目录,然后重新生成类库和宿主应用。有时候缓存会导致资源没有正确更新到目标版本中。

针对性解决方案

方案1:添加通用版本的资源

把btn_XXXX.xml复制一份到类库的Resources/drawable目录(不带任何API版本后缀)。这样:

  • API23+的设备会优先加载drawable-v21里的版本(符合你的设计需求)
  • API21/22的设备会加载drawable目录下的通用版本,避免找不到资源的问题

注意:通用版本的XML里不要使用API21以上才支持的属性(比如android:elevation是API21支持的就没事,API23+的属性要去掉或者用兼容方式)

方案2:使用兼容性API加载资源

替换掉直接调用SetButtonDrawable(Resource.Drawable.btn_XXXX)的代码,改用ContextCompat来获取Drawable,它会自动处理不同API版本的资源适配:

using Android.Support.V4.Content; // 记得引用这个命名空间

// 在你的控件/Activity代码中
var drawable = ContextCompat.GetDrawable(Context, Resource.Drawable.btn_XXXX);
this.SetButtonDrawable(drawable);

这种方式能确保资源被正确加载,避免旧API下的资源查找逻辑问题。

方案3:检查类库的SDK版本配置

打开类库的项目属性,确认:

  • Minimum Android version设置为API21或者更低(比如API19),确保API21/22的设备能正常加载类库的资源
  • Target Android version设置为API23或者更高,和你测试的正常版本保持一致

额外排查点

如果以上方法都没用,检查宿主应用的资源是否和类库的资源ID冲突。不过从错误信息看是找不到文件,ID冲突一般会报其他错误,所以这个概率比较低,但可以通过查看生成的Resource.designer.cs文件确认btn_XXXX的ID是否正确。

内容的提问来源于stack exchange,提问作者sarath kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:47:08