【Android】does not have an ActionBar set via setSupportActionBar()

问题描述

使用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()

你可能感兴趣的:(Android错误记录,android)