我有以下 Activity
class MainActivity : AppCompatActivity() {
private lateinit var drawerLayout: androidx.drawerlayout.widget.DrawerLayout
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
drawerLayout = drawer_layout
val navController = Navigation.findNavController(this, R.id.fragment_main_navHost)
setSupportActionBar(toolbar)
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
navView_main.setupWithNavController(navController)
}
override fun onSupportNavigateUp(): Boolean {
return NavigationUI.navigateUp(drawerLayout,
Navigation.findNavController(this, R.id.fragment_main_navHost))
}
override fun onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START)
} else {
super.onBackPressed()
}
}
您可以看到它与导航图相关联,我正在使用抽屉导航。当我浏览抽屉中的项目时,我想保留汉堡图标,并且仅在单击 fragment 或弹出窗口中的项目时将其更改为上/后退按钮,并确保系统的行为反射(reflect)了什么用户期望基于显示的图标。有可能吗
最佳答案
要控制AppBar导航上/后显示的时间需要做以下操作
1- 创建 AppBarConfiguration 并将顶级目的地和抽屉布局传递给它
appBarConfiguration = AppBarConfiguration(
setOf(
R.id.dest_one,
R.id.dest_two
),
drawerLayout
)
2- 告诉 AppBar 配置和导航。这将有助于显示标题并显示向上箭头或抽屉菜单图标
setupActionBarWithNavController(navController, appBarConfig)
3- 最后覆盖 onOptionsItemSelected 和 onSupportNavigateUp 以及导航组件扩展,以告知 AppBar 的行为方式
override fun onOptionsItemSelected(item: MenuItem)= item.onNavDestinationSelected(findNavController(R.id.my_nav_host_fragment))
|| super.onOptionsItemSelected(item)
override fun onSupportNavigateUp() = findNavController(R.id.my_nav_host_fragment).navigateUp(appBarConfiguration)
引用 Google 代码实验室导航 Navigation Codelab
关于android - 导航组件,控制何时显示汉堡包或返回图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52172111/