You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin开发中如何移除Toolbar工具栏标题?Navigation场景常规设置无效

问题说明
  • 我有如下所示的Toolbar:
    enter image description here
  • 需求:移除Fragment关联的Toolbar标题,以便展示更多菜单项。
  • 疑问:该设置应该在XML文件中配置,还是在Activity中实现?

此前尝试的无效操作

我在MainActivity中添加了如下代码,均未生效:

getActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
setSupportActionBar(toolbar).setTitle("");
toolbar.setTitle(null)

附带的MainActivity代码片段

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)

        val navController = Navigation.findNavController(this, R.id.nav_host_fragment)
        setupBottomNavMenu(navController)
        setupSideNavigationMenu(navController)
        setupActionBar(navController)
    }
}

无效原因分析

你之前的操作不生效主要有四个核心原因:

  • API调用错误:getActionBar() 是原生ActionBar的方法,在AppCompatActivity下默认返回null,该行代码执行后无实际效果。
  • 代码写法错误:setSupportActionBar(toolbar).setTitle("") 中setSupportActionBar是无返回值的方法,该行代码实际不会执行设置标题的逻辑。
  • 逻辑被覆盖:setupActionBar(navController) 一般内部是调用setupActionBarWithNavController,该方法会让NavController自动同步导航图(nav_graph)中各Fragment目的地的android:label属性到Toolbar标题,你手动设置的隐藏/清空标题的逻辑,会在目的地切换时被自动回调覆盖。
  • 操作对象错误:直接调用toolbar.setTitle(null)无法生效,因为Toolbar已经作为SupportActionBar被接管,标题展示控制权在SupportActionBar手中,直接修改Toolbar属性会被ActionBar的同步逻辑覆盖。
可行解决方案

两种配置方式都可实现,根据不同的需求场景选择对应方案即可:

场景1:全局所有页面都隐藏Toolbar标题

直接在setSupportActionBar(toolbar)之后调用SupportActionBar的显示开关即可,该开关不会被NavController的标题同步逻辑覆盖:

setSupportActionBar(toolbar)
// 关闭标题显示,全局所有页面都不会展示标题
supportActionBar?.setDisplayShowTitleEnabled(false)

后续正常执行NavController绑定逻辑即可。如果需要XML配置配合,可直接在Toolbar的布局XML中添加app:title="",避免默认标题残留。

场景2:仅部分页面隐藏标题,其他页面保留标题

给NavController添加目的地切换监听器,根据页面动态控制标题显示:

// 在setupActionBar(navController)之后添加即可
navController.addOnDestinationChangedListener { _, destination, _ ->
    // 替换为需要隐藏标题的页面id
    if (destination.id == R.id.nav_home || destination.id == R.id.nav_profile) {
        supportActionBar?.setDisplayShowTitleEnabled(false)
    } else {
        // 其他页面恢复显示标题
        supportActionBar?.setDisplayShowTitleEnabled(true)
    }
}

场景3:仅清空标题文字、保留标题占位空间

直接修改导航图(nav_graph.xml)中对应Fragment的android:label属性为"",NavController自动同步时就会把标题设为空,不需要额外写代码。


内容的提问来源于stack exchange,提问作者Enigma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 22:06:02