androidx导航api:我们可以让菜单按钮始终可见吗?

androidx导航api:我们可以让菜单按钮始终可见吗?,android,Android,我有一个使用androidx导航api的应用程序。它按预期工作。但我不明白为什么菜单按钮会从汉堡图标变为向上箭头,因为我们有一个全局按钮。因此,我想知道是否有可能强制api始终保持汉堡按钮。我发现,如果您使用以下代码 val navSet = setOf(R.id.nav_journal, R.id.nav_copyright) val drawerLayout: DrawerLayout? = findViewById(R.id.drawer_layout) appBarConfigurati

我有一个使用androidx导航api的应用程序。它按预期工作。但我不明白为什么菜单按钮会从汉堡图标变为向上箭头,因为我们有一个全局按钮。因此,我想知道是否有可能强制api始终保持汉堡按钮。我发现,如果您使用以下代码

val navSet = setOf(R.id.nav_journal, R.id.nav_copyright)
val drawerLayout: DrawerLayout? = findViewById(R.id.drawer_layout)
appBarConfiguration = AppBarConfiguration(navSet, drawerLayout)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
navController = navHostFragment.navController
setupActionBarWithNavController(navController, appBarConfiguration)
然后,这两个活动都会出现汉堡图标,但维护一个可能的导航活动列表似乎不太方便。

试试以下方法:

navController.addOnDestinationChangedListener { controller, destination, _ ->       
    if (destination.id == R.id.xxx || destination.id == R.id.xxx || ... ) {
        supportActionBar?.setHomeAsUpIndicator(R.drawable.hamburger)
    }
}
  • 在此处找到汉堡图标:

并将此添加到其他每个
活动
片段

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    if (item.itemId == android.R.id.home) {
        requireActivity().drawerLayout.open()
    }

    return true
}

尝试使用
setOpenableLayout()
drawerLayout
附加到
appBarConfiguration

这需要使用
AppBarConfiguration.Builder
模式:

val appBarConfiguration = AppBarConfiguration.Builder(
    R.id.nav_journal, R.id.nav_copyright
).setOpenableLayout(drawerLayout).build()

val navHostFragment =
    supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController: NavController = navHostFragment.navController
setupActionBarWithNavController(this, navController, appBarConfiguration);

还要确保将所有不想在中显示up/back按钮的片段添加到
appBarConfiguration
中。您已经添加了两个片段(
R.id.nav_journal,R.id.nav_copyright
),如果抽屉中还有更多片段,那么您也需要添加它们。

您所说的“我们可以使用的全局片段”是什么意思?您是否使用具有多个片段的单个活动模式?如果是这样,那就是正常的行为。“向上”按钮的行为与“后退”按钮相同。@SamChen全局后退按钮。在主页按钮旁边。我意识到这是正常的行为,但我希望汉堡菜单按钮一直在那里,而不是向上按钮。你的意思是你希望“向上”按钮显示汉堡图标而不是ARROW,即使你在第二或第三个
片段
(或你应用程序的更深层页面)?如果是这样的话,它会让用户感到困惑,因为我们都知道单击时汉堡图标会显示抽屉,返回箭头图标会将我们带回到上一个屏幕。@SamChen是的,我希望汉堡仍然会打开抽屉。我删除了If。因为我不想填充我使用的每个活动/片段。但是,功能没有改变,如果汉堡包图标每次都能打开抽屉,那就太完美了。@glend,如你所愿。