运行注册Activity时遇Error inflating XML类错误:资源非Drawable
解决 "Error inflating XML class - Resource is not a Drawable (color or path)" 错误
你遇到的这个XML膨胀错误,大概率是布局里引用Drawable资源时出了类型不匹配或路径错误的问题,结合你提到的Toolbar、EditText相关Drawable,我整理几个实用的排查方向:
1. 修正颜色资源的Drawable引用方式
在API 22这类较低版本中,直接把颜色资源当作Drawable使用会触发这个错误。比如给EditText设置背景时:
- 错误写法:
<EditText android:background="@color/light_gray" /> - 正确处理方式(二选一):
<!-- 用drawable文件包裹颜色 --> <EditText android:background="@drawable/edit_text_bg" /> <!-- 或者用tint属性给默认Drawable上色 --> <EditText android:background="@drawable/default_edit_bg" android:backgroundTint="@color/light_gray" />
2. 排查Toolbar的Drawable引用问题
Toolbar里的导航图标、菜单图标很容易踩坑:
- 别把颜色资源当成图标Drawable引用,比如错误写法:
app:navigationIcon="@color/black",要改成app:navigationIcon="@drawable/ic_back_arrow" - 如果用了Vector Drawable,API 22及以下版本需要在
build.gradle开启支持:
或者直接把Vector转成PNG格式放到对应drawable目录。android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
3. 检查自定义View与XML根节点
如果布局里有自定义View,确认它的构造函数是否正确处理了AttributeSet,有没有在初始化时错误地把颜色资源当作Drawable加载。另外,别不小心把布局根节点写错类型,比如把LinearLayout误写成androidx.appcompat.widget.Toolbar,也会触发膨胀错误。
4. 清理缓存重建项目
有时候是Android Studio缓存导致的资源识别异常,试试:
- 点击菜单栏
Build -> Clean Project - 接着执行
Build -> Rebuild Project - 极端情况可以手动删除项目的
build目录和.idea下的缓存文件,再重新同步项目
要是这些方法都没解决,你可以把注册Activity布局、Toolbar布局、EditText的Drawable定义代码贴出来,这样能更精准定位问题~
内容的提问来源于stack exchange,提问作者Comycos
相关产品推荐
相关产品推荐

