You need to enable JavaScript to run this app. 如何在保留Navigation对MaterialToolbar支持的前提下实现标题居中
优惠活动
大模型
产品
解决方案
定价
更多

如何在保留Navigation对MaterialToolbar支持的前提下实现标题居中

适配Navigation绑定的MaterialToolbar标题居中实现方案

核心遵循原则:全程不替换Toolbar的内部原生控件,不改动Navigation对Toolbar的原有绑定逻辑,完整保留目的地自动更新标题、自动切换返回导航按钮的现有能力

为什么之前的修改尝试不生效

  • 单纯靠修改Toolbar全局样式设置文字对齐不生效,是因为Navigation在执行setupWithNavController绑定时,会直接调整Toolbar内部mTitleTextView的布局参数,把标题的左偏移量对齐到左侧导航按钮、右侧菜单的预留空间,代码层设置的布局参数优先级远高于主题样式,写在xml里的textAlignment配置根本不会被应用。
  • 在Toolbar内部额外放自定义TextView当标题的方案完全行不通:Toolbar内置的标题控件会一直占位显示,出现两个标题重叠的问题;且Navigation更新标题时只会修改内置控件的内容,自定义TextView不会随目的地同步切换,本质上是破坏了原有绑定的链路。

无侵入实现步骤

1. 高版本Material库直接使用原生属性(推荐)

如果项目使用的com.google.android.material:material依赖版本≥1.4.0,直接在MaterialToolbar的布局节点加一行属性即可,完全不需要写额外代码:

<com.google.android.material.appbar.MaterialToolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:titleCentered="true"
    <!-- 原有其他配置保留不动 -->
    app:menu="@menu/main_menu"
    app:navigationIcon="@drawable/ic_back"/>

这个titleCentered是MaterialToolbar内置的原生支持属性,开启后会自动让内置标题控件以整个Toolbar的宽度为基准居中对齐,不受左右两侧按钮的空间偏移影响,和Navigation的绑定逻辑完全兼容。

2. 低版本Material库的兼容实现

如果依赖版本低于1.4.0没有上述属性,不需要修改原有绑定代码,只需要在完成setupWithNavController绑定之后,追加几行布局参数调整逻辑即可:

// 原有Navigation绑定逻辑完全保留
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
toolbar.setupWithNavController(navController)

// 仅调整内置标题控件的对齐规则,不修改控件引用本身
toolbar.childSequence
    .filterIsInstance<TextView>()
    .firstOrNull { it.text == toolbar.title }
    ?.let { titleView ->
        val layoutParams = titleView.layoutParams as Toolbar.LayoutParams
        // 清除原有随导航按钮偏移的边距,设置居中对齐
        layoutParams.gravity = Gravity.CENTER
        layoutParams.marginStart = 0
        layoutParams.marginEnd = 0
        titleView.layoutParams = layoutParams
    }

这部分调整完全不会干扰Navigation的原有控制逻辑:Navigation依然会在Fragment切换时自动写入对应的页面标题,依然会根据回退栈状态自动切换左侧导航图标的交互与样式,因为我们从头到尾没有替换、移除Toolbar内部的任何原生控件,只是改了标题控件的布局对齐规则。

踩坑注意事项

  • 不要给Toolbar添加左右方向的padding来凑居中效果,会连带把导航按钮、菜单按钮一起挤歪,破坏原有交互布局。
  • 标题的字号、颜色等样式调整,依然可以通过app:titleTextAppearance属性配置,和居中设置完全兼容,没有冲突。
  • 不要试图通过主题配置覆盖标题对齐属性,代码层的布局参数优先级远高于主题配置,配置了也不会生效。

内容的提问来源于stack exchange,提问作者Mehdi Jahed Manesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 09:15:07