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

Android setSupportActionBar调用后Toolbar不显示问题咨询

Toolbar 不显示及导航抽屉唤起功能修复

按以下顺序核对配置,绝大多数同类问题都能解决:

1. 修正主题配置(styles.xml)

调用setSupportActionBar()使用自定义Toolbar时,必须禁用主题自带的原生ActionBar,否则会出现控件冲突,直接导致自定义Toolbar不渲染。
将应用主题的父类替换为NoActionBar版本,示例:

<style name="Theme.你的应用名" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- 其余自定义主题属性保留即可 -->
</style>

禁止使用自带ActionBar的主题父类,包括但不限于Theme.AppCompat.Light.DarkActionBar、Theme.MaterialComponents.DayNight。

2. 修正布局层级

2.1 app_bar_main.xml 布局校验

Toolbar必须放在AppBarLayout容器内,高度不要设为0dp,页面内容区要加滚动行为避免遮挡Toolbar,参考正确写法:

<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.MaterialComponents.Light" />
    </com.google.android.material.appbar.AppBarLayout>

    <!-- 页面主内容(如NavHostFragment)必须加layout_behavior,否则会被Toolbar遮挡 -->
    <fragment
        android:id="@+id/nav_host_fragment_content_main"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        app:navGraph="@navigation/nav_graph" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

2.2 activity_main.xml 抽屉布局校验

DrawerLayout的子View顺序不能乱:第一个子View必须是包含Toolbar的主内容布局,第二个子View是侧边导航NavigationView,参考结构:

<androidx.drawerlayout.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <!-- 主内容区,第一个子View -->
    <include
        android:id="@+id/appBarMain"
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- 侧边导航栏,第二个子View,必须指定layout_gravity为start -->
    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

3. 修正MainActivity初始化逻辑

不要只调用setSupportActionBar()就结束,必须完成导航组件和Toolbar、抽屉的绑定,才能正常显示汉堡按钮唤起抽屉,参考正确代码:

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    private lateinit var appBarConfiguration: AppBarConfiguration

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 绑定自定义Toolbar
        setSupportActionBar(binding.appBarMain.toolbar)

        val navController = findNavController(R.id.nav_host_fragment_content_main)
        // 将DrawerLayout传入配置,指定顶级目的地显示汉堡菜单按钮
        appBarConfiguration = AppBarConfiguration(navController.graph, binding.drawerLayout)
        // 绑定Toolbar与导航控制器,自动处理按钮状态、点击跳转和抽屉唤起
        setupActionBarWithNavController(navController, appBarConfiguration)

        binding.navView.setupWithNavController(navController)
    }

    // 必须重写该方法,否则点击导航按钮无响应
    override fun onSupportNavigateUp(): Boolean {
        val navController = findNavController(R.id.nav_host_fragment_content_main)
        return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
    }
}

其他偶发问题排查

  • 检查Toolbar是否被设置了android:visibility="gone"、透明背景,或背景色与页面主色完全一致导致视觉上不可见
  • 检查是否在嵌套的Fragment中重复调用setSupportActionBar,覆盖了Activity的Toolbar配置
  • 确认AppBarLayout没有被设置为全透明且elevation为0,导致和页面内容融为一体

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:33:40