如何更改 android material 组件中的工具栏后退按钮图标

How to change toolbar back button icon in android material components

我想将默认的向上导航图标(后退按钮图标)更改为我的自定义图标。我没有使用抽屉,只是一个简单的工具栏和 material 个组件

这可能吗?

如果您使用 Toolbar 更改图标 只需使用:

Toolbar toolbar = findViewById(R.id.xxx);
toolbar.setNavigationIcon(R.drawable.xxxx4);
setSupportActionBar(toolbar);

如果您使用的是 ActionBar,您可以使用:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.xxx);

您还可以在您的应用主题中更改它覆盖 homeAsUpIndicator 属性:

  <style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
    <item name="homeAsUpIndicator">@drawable/...</item>
  </style>

如果您正在使用 导航组件,目前无法自定义 HomeAsUpIndicator 图标,当您在非根目的地。
有一个解决方法,在您的设置方法之后添加一个 addOnDestinationChangedListener 并检查目标。
类似于:

navController.addOnDestinationChangedListener(
        new NavController.OnDestinationChangedListener() {
            @Override
            public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
                if (destination.getId() == R.id.nav_xxx) {
                    //With ActionBar                        
                    //getSupportActionBar().setHomeAsUpIndicator(R.drawable.xxxx);

                    //With a Toolbar
                    toolbar.setNavigationIcon(R.drawable.xxxx);
                }
            }
        });

如果您创建了一个工具栏并将其设置为 ActionBar,如下所示

toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)

设置自定义图标有两种选择:

选项 1

toolbar?.setNavigationIcon(R.drawable.homeNavigationIcon)

选项 2

supportActionBar?.setHomeAsUpIndicator(R.drawable.homeNavigationIcon)