Caused by: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView

Caused by: Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView Android5.0~6.0之间的兼容性问题

BottomNavigationView inflating错误问题

最近刚好跑一个demo,在Android studio 上编译,运行在Android5.1 的手机上,结果程序一运行就闪退。报错原因如下:
图一

问题分析

由于BottomNavigationView是android.material包里的控件,报错的原因首先考虑兼容性问题,下面逐一分析:

  1. 系统版本导致兼容性分析 。依次在Android6.0、Android7.0、Android8.0虚拟机上面测试,测试结果如下:android6.0-闪退,android7.0、8.0-成功运行。得出结论:android7.0以下程序运行闪退,而android7.0以上则成功运行。
  2. 排除android7.0增加的FileProvider导致的崩溃问题
  3. 新建一个带Bottom Navigation Activity Project,观察其在android5.0和6.0的运行情况。结果发现刚新建的Project运行正常。
    在这里插入图片描述
  4. 通过Beyond Compare 对比两个项目之间的差异,发现新建的带BottomNavigationView 的项目,其BottomNavigationView 的menu属性中指定的icon的资源是放在drawable 目录下,如下图所示。
    在这里插入图片描述
  5. 对比发现报错的project 中BottomNavigationView 的menu属性中的icon属性指定的图片则放在了drawable-v24目录下(比如下图tabbar_home.png只有drawable-v24目录下才有),众所周知,drawable-v24目录是android7.0以上才能访问的资源目录,同理还有mipmap-anydpi-v26也是android8.0以上才能访问的资源目录。
    在这里插入图片描述

总结

综上所述,其项目闪退原因是:在android7.0以下运行该程序,导致BottomNavigationView 中的menu属性获取不到drawable-v24文件夹中的资源,导致程序奔溃。解决方法是:把BottomNavigationView中menu属性用到的drawable-v24文件夹中的图片资源复制一份到drawable文件夹中即可解决。
在这里插入图片描述
最后需要注意的是:不同的资源文件目录可能对应着不同的android版本号,比如上图所示drawable-v24对应的版本是android7.0以上,mipmap-anydpi-v26对应的版本是android8.0以上。

发布了2 篇原创文章 · 获赞 2 · 访问量 28

猜你喜欢

转载自blog.csdn.net/m0_37269393/article/details/104971658