是否可以更改导航组件中的向上按钮图标?

use*_*282 8 android android-navigation android-jetpack android-architecture-navigation

我想更改与导航组件一起使用的 ActionBar 中的向上按钮图标。我尝试了几种选择,例如:

supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_arrow_left_blue_24dp)
Run Code Online (Sandbox Code Playgroud)

MainAcitivty

app:navigationIcon="@drawable/ic_arrow_left_blue_24dp"
Run Code Online (Sandbox Code Playgroud)

Toolbar.xml 文件中,似乎没有任何效果。

我有一个非常标准的设置

setSupportActionBar(appToolbar.toolbar)
setupActionBarWithNavController(this, navController)
Run Code Online (Sandbox Code Playgroud)

MainActivity:onCreate方法中调用。

我希望

supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_arrow_left_blue_24dp)
Run Code Online (Sandbox Code Playgroud)

会起作用,因为例如ActionBar通过调用禁用标题:

supportActionBar?.setDisplayShowTitleEnabled(false)
Run Code Online (Sandbox Code Playgroud)

按预期工作,Fragment导航时标题未设置为名称。

更重要的是,我进行了一些调查,ActionBarOnDestinationChangedListener其中有一个调用将setNavigationIcon图标设置为DrawerArrowDrawable,这有点奇怪,因为我没有Drawer在我的设置中使用。

也改为:

setupWithNavController(toolbar, navController)
Run Code Online (Sandbox Code Playgroud)

不工作,因为ToolbarOnDestinationChangedListener也使用相同的DrawerArrowDrawable.

use*_*282 8

我找到了答案。我检查了导航组件的问题跟踪器,现在似乎不可能在没有解决方法的情况下更改它:

https://issuetracker.google.com/u/1/issues/121078028

很高兴它仍然是可能的,我们只需要在OnDestinationChangedListener那里实现和更改图标,因为它在setNavigationIconin之后被调用AbstractAppBarOnDestinationChangedListener。这是一个代码:

navController.addOnDestinationChangedListener { _, _, _ ->
      supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_arrow_left_blue_24dp)
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以为不同的目的地使用不同的图标。

这是临时解决方案,因为此功能尚不存在。我正在使用1.0.0-alpha09导航组件的版本。