问题描述
使用Android studio自带的模板创建一个带有三个底部导航按钮的的页面。其中模板使用了【BottomNavigationView】,此时顶部是有系统主题栏和导航栏的,但是现在不想要导航栏,于是在主题设置中进行修改
<style name="Theme.KySmartBrain" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
然后再打开应用,发现应用崩溃了
。。。。
问题分析
这是系统自动生成的底部导航栏模板代码
//获取实例
val navView: BottomNavigationView = binding.navView
//获取hostfrgfment
val navController = findNavController(R.id.nav_host_fragment_activity_main)
//创建appBarConfiguration配置
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
)
)
//关联hostFragment和appBarConfiguration配置文件
setupActionBarWithNavController(navController, appBarConfiguration)
//将所有配置文件绑定到BottomNavigationView实现页面切换功能
navView.setupWithNavController(navController)
所以这个系统自动创建的导航是需要ActionBar的,但是我们在系统主题使用的是
Theme.MaterialComponents.DayNight.NoActionBar
所以把ActionBar去掉了,导致找不到ActionBar而报错闪退。
问题解决
首先要明确,如果要使用系统创建的底部导航栏的时候,是需要一个【ActionBar】的,但是我们如果实在不想要这个东西,要么换一种底部导航实现方式,要么就要隐藏这个ActionBar。
最简单的方式,隐藏ActionBar
1.还是使用系统默认的主题方式
Theme.MaterialComponents.DayNight.DarkActionBar
2.在Activity中加入这段代码,隐藏掉【ActionBar】
supportActionBar!!.hide()