Xamarin.Forms Android项目迁移至AndroidX后出现类型转换异常求助
解决Xamarin.Forms AndroidX迁移后的InvalidCastException问题
我之前帮朋友排查过几乎一模一样的问题,你的这个异常Unable to convert instance of type 'Android.Widget.RelativeLayout' to type 'AndroidX.AppCompat.Widget.Toolbar'本质是控件类型环境不兼容,大概率和你怀疑的Xam.Plugin.Iconize脱不了干系,下面给你一步步排查和解决的思路:
一、先快速验证是不是Iconize插件的问题
这是最直接的验证方式,花几分钟就能确认:
- 临时卸载
Xam.Plugin.Iconize的NuGet包,注释掉项目中所有和它相关的代码(比如图标渲染、Toolbar绑定逻辑等) - 彻底清理项目:删除
bin、obj文件夹,右键项目选择“清理” - 重新编译运行项目
- 如果异常消失,那100%是这个插件的问题——它内部还在依赖旧的Android Support库控件,和你项目的AndroidX环境完全冲突了
二、针对Iconize插件的解决方案
如果项目必须依赖这个插件,有两种处理路径:
1. 寻找官方兼容AndroidX的版本
去NuGet搜索Xam.Plugin.Iconize,看看有没有更新到支持AndroidX的版本(有些老插件会发布带AndroidX后缀的分支包,或者主版本更新后默认兼容)。如果有,直接升级到最新兼容版本即可解决问题。
2. 手动修改插件源码适配AndroidX
如果插件没有官方的AndroidX适配版本,只能自己动手改:
- 下载插件的源码(一般托管在GitHub上)
- 把Android项目中所有
Android.Support.V7.Widget.Toolbar替换成AndroidX.AppCompat.Widget.Toolbar,同时替换所有相关的Support库引用为对应的AndroidX包 - 检查插件的axml布局文件,把里面的
android.support.v7.widget.Toolbar标签换成androidx.appcompat.widget.Toolbar - 重新编译插件,生成自定义NuGet包后引用到你的项目中
三、其他可能的排查点
如果验证后不是Iconize的问题,再检查这些地方:
- 残留的Support库引用:打开NuGet管理器,搜索
Xamarin.Android.Support,如果还有这类包,全部卸载,替换成对应的Xamarin.AndroidX.*包 - 主题配置错误:确保你的App主题是AndroidX兼容的,比如
Theme.MaterialComponents.DayNight或者Theme.AppCompat.Light.NoActionBar,不能再用旧的Support主题 - 布局文件冲突:检查项目中所有axml布局,有没有混用Support和AndroidX的控件命名空间,比如
xmlns:app对应的控件是不是还指向旧的Support库
最后提醒一下,AndroidX迁移后一定要彻底清理项目缓存,否则旧的编译文件会一直干扰运行。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

