Android 6.0.1下BottomNavigationView加载致应用启动崩溃问题
问题定位
从logcat最底层的报错可以直接定位崩溃原因:
Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f070069
崩溃发生在BottomNavigationView初始化、加载绑定的菜单资源阶段,本质是你给底部导航菜单项配置的图标、或者底部导航相关的drawable资源,在Android 6.0.1(API 23)系统上无法被正常解析,Android 10(API 29)及以上版本因为原生支持更多drawable格式、资源解析逻辑更宽松,所以不会触发崩溃。
分步修复方案
- 优先排查底部导航菜单资源
打开res/menu/bottom_nav_menu.xml,逐一检查5个菜单项的android:icon属性指向的资源:- 确认图标资源没有存放在
drawable-v24、drawable-v26这类带高版本限定的资源目录下,必须在无版本后缀的drawable目录、或者对应密度的通用drawable目录(如drawable-hdpi)下存放一份可在API23上使用的图标资源 - 如果你用的是VectorDrawable矢量图标,必须开启AppCompat矢量图兼容:
- 在模块级
build.gradle的defaultConfig作用域内添加配置:
android { defaultConfig { // ... 其他现有配置 vectorDrawables.useSupportLibrary = true } }- 检查矢量图xml内容,不要在
<path>节点的android:fillColor属性里直接引用颜色资源(API23及以下不支持该写法),直接填写十六进制色值即可
- 在模块级
- 确认图标资源没有存放在
- 排查布局中引用的自定义drawable
你在布局里给根布局、BottomNavigationView分别设置了@drawable/page_gradient、@drawable/nav_background两个自定义背景:- 检查这两个drawable的xml代码,删除所有只在API24及以上版本才支持的属性(比如
android:tileModeX、android:tileModeY,渐变节点里的高版本专属属性等),或者为低版本单独做适配
- 检查这两个drawable的xml代码,删除所有只在API24及以上版本才支持的属性(比如
- 检查主题配置
确认你的应用Activity使用的主题继承自Theme.MaterialComponents系列(或AppCompat系列主题),不要继承系统原生的android:Theme类主题,否则会导致Material组件加载兼容资源失败。
额外优化建议
你已经在代码里接入了ViewBinding,不需要再重复调用findViewById获取控件实例,直接通过binding对象访问控件即可,能减少空指针风险:
// 替换原来的findViewById写法 Toolbar toolbar = binding.toolbar; BottomNavigationView bottomNavigationView = binding.bottomNavigationView;
内容的提问来源于stack exchange,提问作者Sayooj
相关产品推荐
相关产品推荐

