Android应用NavigationView创建报错致Activity崩溃求助
嘿,我看你遇到了NavigationView初始化时的崩溃问题,Log指向的是Inflate这个控件失败。结合你给的代码和报错信息,我梳理了几个大概率能解决问题的方向,咱们一步步来:
1. CircleImageView版本和Support库不兼容是重灾区
你用的de.hdodenhof:circleimageview:3.0.0是针对AndroidX的版本,但你的项目还在用旧的Support Library(28.0.0版本),这俩凑一起肯定要出冲突,直接导致NavigationView加载它的header布局时失败。
改法很简单:把CircleImageView降级到支持Support Library的版本,在gradle里改成:
implementation 'de.hdodenhof:circleimageview:2.2.0'
这个版本是专门适配旧Support库的,和你当前的依赖版本能完美配合。
2. 检查NavigationView关联的资源有没有坑
NavigationView加载失败,很多时候是它引用的header或者menu资源出问题了:
- 先确认
@drawable/background和@drawable/accountimagecolor这俩图片资源是不是真的在drawable目录里,有没有损坏或者格式不对(比如把SVG直接放进去没转成VectorDrawable?)。 - 再看看
@menu/navigation_menu这个菜单文件有没有写错,比如有没有引用不存在的图标或者字符串资源,item的id有没有重复之类的。
3. 确保全局主题是AppCompat系列
NavigationView必须依赖AppCompat主题才能正常工作,别光看v21的styles.xml,还要检查默认的styles.xml(就是不在v21目录下的那个)里的主题是不是继承自Theme.AppCompat系列:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
要是默认主题用的是原生的Theme.Light之类的,NavigationView肯定加载不出来。
4. 清理缓存重建项目试试
有时候Android Studio的编译缓存抽风,也会导致这种莫名其妙的Inflate错误。你可以试试:
- 点顶部菜单栏的
Build->Clean Project - 然后
Build->Rebuild Project - 实在不行重启下Android Studio,再运行项目
终极排查:隔离问题
如果上面的方法都没用,你可以先临时把NavigationView的app:headerLayout="@layout/navigation_header"这句注释掉,然后运行项目。如果不崩溃了,那问题肯定出在header布局里,再挨个排查header里的控件和资源,比如先去掉CircleImageView,换成普通ImageView试试,看是不是这个控件的问题。
内容的提问来源于stack exchange,提问作者Alex

