使用带有喷气背包导航组件的导航抽屉时如何更改工具栏图标(汉堡图标)

Posted

技术标签:

【中文标题】使用带有喷气背包导航组件的导航抽屉时如何更改工具栏图标(汉堡图标)【英文标题】:how to change toolbar icon (hamburger icon) when using navigation drawer with jetpack navigation component 【发布时间】:2020-11-22 19:25:43 【问题描述】:

我正在使用jetpack导航组件构建一个导航抽屉,我想更改工具栏的汉堡图标,我尝试了很多类似下面的解决方案但它们不起作用

app:navigationIcon="@drawable/menu"

还有

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.menu);

这是我的代码

 override fun onCreate(savedInstanceState: Bundle?) 
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setSupportActionBar(toolbar)
    navController=findNavController(R.id.nav_host_fragment)
    appBarConfiguration=AppBarConfiguration(setOf(R.id.nav_acceuil,R.id.nav_notifications,R.id.nav_gerer,R.id.nav_deconnexion),drawer_layout)
    setupActionBarWithNavController(navController,appBarConfiguration)
    nav_view.setupWithNavController(navController);

【问题讨论】:

【参考方案1】:

您可以使用addOnDestinationChangedListener

    navController.addOnDestinationChangedListener  controller, destination, arguments ->
        if (destination.id == R.id.nav_xxxx)
            supportActionBar?.setHomeAsUpIndicator(R.drawable.xxxx)
        
    

【讨论】:

终于成功了 虽然这很神奇,但在语义上却没有意义。我来自网络世界,我会理解这是否隐含地是 android 世界中的“DOM 就绪”一种技巧。是吗? 这对我有用,但为什么如果我们把它放在 onCreate() 上它不起作用?

以上是关于使用带有喷气背包导航组件的导航抽屉时如何更改工具栏图标(汉堡图标)的主要内容,如果未能解决你的问题,请参考以下文章

使用喷气背包导航将自定义过渡动画添加到底部导航设置

如何完成活动? (喷气背包导航)

导航组件替换/更改后台堆栈

如何同时使用导航抽屉和底部导航 - 导航架构组件

使用导航抽屉旋转时的片段更改

VueJS + Vuex + Vuetify 导航抽屉