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

文章讲述了在Androidstudio中使用模板创建带有BottomNavigationView的页面后,因不想要导航栏而修改主题为NoActionBar导致应用崩溃的问题。问题在于系统模板依赖ActionBar,但NoActionBar主题移除了它。解决方案包括隐藏ActionBar或更换导航实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

使用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()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值