Android Studio中使用Toolbar替换顶部导航栏标题失效如何解决
getSupportActionBar().setTitle()触发空指针是因为getSupportActionBar()返回了null,通常由两个原因导致:一是调用该方法的时机早于setSupportActionBar(mToolbars)执行,二是应用当前使用的主题自带原生ActionBar,导致自定义Toolbar绑定失败。
正确修改方式
- 第一步:确认主题配置
打开AndroidManifest.xml,检查当前Activity使用的主题,需确保主题继承自带NoActionBar的分支,例如Theme.MaterialComponents.DayNight.NoActionBar,避免和自定义Toolbar冲突。 - 第二步:代码设置标题
推荐直接调用Toolbar实例的setTitle方法,无需依赖SupportActionBar对象,稳定性更高,调整后的代码如下:
如果你坚持使用SupportActionBar的写法,必须先加非空判断避免崩溃:Toolbar mToolbars = findViewById(R.id.mainToolbar); setSupportActionBar(mToolbars); mToolbars.setTitle("你需要的新标题");if (getSupportActionBar() != null) { getSupportActionBar().setTitle("你需要的新标题"); } - 静态配置方式
如果标题是固定值,可以直接在布局文件中给Toolbar添加android:title属性:<androidx.appcompat.widget.Toolbar android:id="@+id/mainToolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:title="固定标题内容" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:backgroundTint="@android:color/white" app:liftOnScroll="true"/>
过往操作无效的原因
- 在
AndroidManifest.xml中配置android:label仅对系统默认的原生ActionBar生效,使用自定义Toolbar时该属性不会自动同步为Toolbar标题。 - 在menu的item节点中配置
android:label是菜单项的专属属性,和Toolbar标题没有关联,不会生效。
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

