在特定片段中隐藏工具栏在应用栏布局内

问题描述

我正在使用 Navigation Component. 我在 Toolbar 中有 AppBarLayout 但我必须在特定片段中隐藏工具栏。为此,我使用了 Navigation 组件中的 onDestinationChanged 来监听路由和隐藏,但工具栏从不隐藏。

override fun onDestinationChanged(
    controller: NavController,destination: NavDestination,arguments: Bundle?
) { 
    if (destination.id == R.id.helpFragment) {
        Timber.e("App Bar Hide")
        binding.appBarLayout.setExpanded(false,true) //This never hides toolbar
    } else {
        Timber.e("App Bar Show")
        binding.appBarLayout.setExpanded(true,true)
    }
}

这是我的布局

<com.google.android.material.appbar.AppBarLayout
    android:id="@+id/app_bar_layout"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@android:color/transparent"
    app:elevation="0dp">

       <com.google.android.material.appbar.MaterialToolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:title="@string/home" />
</com.google.android.material.appbar.AppBarLayout>

解决方法

val navHostFragment: NavHostFragment =
        supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
    val navController: NavController = navHostFragment.navController

    val appBarConfiguration: AppBarConfiguration = AppBarConfiguration(navController.graph)
    binding.toolbar.setupWithNavController(navController,appBarConfiguration)

    setSupportActionBar(binding.toolbar)
    navController.addOnDestinationChangedListener { _,destination,_ ->
        when (destination.id) {
            R.id.salesFragment -> {
                supportActionBar?.hide() // to hide
            } else -> {
                supportActionBar?.show() // to show
            }
        }
    }