【问题标题】:Can't change toolbar back icon while using navhost使用 navhost 时无法更改工具栏后退图标
【发布时间】:2019-01-15 14:15:15
【问题描述】:

我正在尝试(没有成功)在使用NavHostFragment 时更改工具栏上的后退箭头图标。我正在使用带有工具栏的NavController(如您在此处看到的)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    setSupportActionBar(toolbar)
    val navController = findNavController(R.id.nav_host_fragment)
    appBarConfiguration = AppBarConfiguration(navController.graph)
    setupActionBarWithNavController(navController, appBarConfiguration)
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    toolbar.setTitleTextColor(resources.getColor(R.color.toolbarTextColor))
    navigation.setupWithNavController(Navigation.findNavController(this, R.id.nav_host_fragment))
}

导航正常,但我似乎无法更改后退图标。

我已经尝试过使用自定义主题。到目前为止,所有定义的属性都不起作用。

    <style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
        <item name="android:navigationIcon">@drawable/ic_keyboard_arrow_left_black_24dp</item>
        <item name="android:homeAsUpIndicator">@drawable/ic_keyboard_arrow_left_black_24dp</item>
        <item name="collapseIcon">@drawable/ic_keyboard_arrow_left_black_24dp</item>
        <item name="android:closeIcon">@drawable/ic_keyboard_arrow_left_black_24dp</item>
    </style>

尝试使用代码:

toolbar.navigationIcon = resources.getDrawable(R.drawable.ic_keyboard_arrow_left_black_24dp)
toolbar.setNavigationIcon(R.drawable.ic_keyboard_arrow_left_black_24dp)
toolbar.navigationIconResource = R.drawable.ic_keyboard_arrow_left_black_24dp

使用代码时,一旦创建布局,后退按钮就会出现,但是当我输入另一个片段时,图标会变回默认的后退图标。

如何更改?

【问题讨论】:

    标签: android kotlin android-toolbar android-architecture-navigation


    【解决方案1】:

    这个功能应该会在以后添加,目前你可以通过实现'OnDestinationChangedListener',并改变回调中的工具栏图标(只要确保在你的设置方法之后添加'OnDestinationChangedListener'),就像这样:

    navController.addOnDestinationChangedListener { controller, destination, arguments ->
            toolbar.setNavigationIcon(R.drawable.ic_keyboard_arrow_left_black_24dp) //set it here for all the destinations, or inside the switch statement if you want to change it based on destination
            when(destination.id) {
                R.id.mainFragment -> {
                  toolbar.setNavigationIcon(R.drawable.ic_keyboard_arrow_left_black_24dp)
                }
                R.id.detailsFragment -> {
                  toolbar.setNavigationIcon(R.drawable.ic_keyboard_arrow_left_black_24dp)
                }
            }
        }
    

    基于这个问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-19
      • 2016-04-07
      • 2015-11-21
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多