通过主题或样式更改工具栏导航图标的色调或颜色

7

我可以通过代码设置工具栏中的导航图标色调:

  Toolbar toolbar = findViewById(R.id.biometry_agreement_toolbar);
  Drawable drawable = AppCompatResources.getDrawable(requireContext(), R.drawable.ic_24_close);
  drawable.setColorFilter(ColorGenerator.buildColorFilterByAttr(toolbar.getContext(), R.attr.colorMaskColored));
  toolbar.setNavigationIcon(drawable);

或者我可以在xml中像这样设置图标,但在这种情况下,我无法设置tint,因为没有属性navigationIconTint:

<androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:navigationIcon="@drawable/ic_24_close"
            app:titleTextColor="@color/color_primary"
            tools:title="@string/title"/>

有没有可能在没有Java代码的情况下设置导航图标的色调?或者设置自定义图标到工具栏中会清除所有的色调和颜色?

我不喜欢从Java代码中设置图标,因为在工具栏初始化时没有很好的代码重用。

我尝试了不同的自定义样式,覆盖了colorControlNormal,但没有成功。

提前致谢。

2个回答

9
针对 AndroidX,应该使用 <com.google.android.material.appbar.MaterialToolbar 代替 <androidx.appcompat.widget.Toolbar
然后尝试这样做:
<com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/mt_main_toolbar"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:elevation="1dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

使用方法如下

mt_main_toolbar.navigationIcon.setTint(Color.RED)

使用XML

<style name="TintedNavigation" parent="Widget.AppCompat.Toolbar.Button.Navigation">
<item name="tint">@color/nav_button_tint</item>

并将其应用于您的样式

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="toolbarNavigationButtonStyle">@style/TintedNavigation</item>
</style>

针对AndroidX

<style name="CustomToolbar" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
<item name="colorOnPrimary">@color/yourColour</item>
</style>

我知道如何使用Java/Kotlin设置色调。但是我想以某种方式使用主题和样式作为解决方案。如果在这种情况下可能的话。 - Maksim Turaev
@MaksimTuraev请查看更新后的答案。 - Manoj Perumarath
为什么应该使用MaterialToolbar而不是AndroidX Toolbar? - user1795832
@user1795832 建议使用Material工具栏,因为它比其他工具栏拥有更多的属性。 - Manoj Perumarath
1
这正是我所需要的,非常好的答案。 - Andy.Diaz
显示剩余2条评论

-2

很遗憾,我已经创建了样式 <style name="ThemeOverlay.Sbrf.Light.CustomToolbar"> <item name="android:textColorSecondary">@color/color_yellow_5</item> </style> 并在工具栏中引用它,如下所示 style="@style/ThemeOverlay.Sbrf.Light.CustomToolbar"。但是图标仍然是黑色的。 - Maksim Turaev
尝试这个:<style name="Theme.MyFancyTheme" parent="android:Theme.Holo"> <item name="android:homeAsUpIndicator">@drawable/back_button_image</item> </style> 或者<style name="ToolbarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar"> <!-- 自定义导航抽屉图标和返回箭头的颜色 --> <item name="colorControlNormal">@color/toolbar_color_control_normal</item> </style> - Vaithiya Nathan
@VaithiyaNathan 2019年的全息主题? - Gabriele Mariotti
@gabriele-mariotti 这只是参考,请使用下面的代码并在“colorControlNormal”中更改颜色。 <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge"> <!-- 在此处自定义您的主题。 --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:windowDisablePreview">true</item> <item name="colorControlNormal">@color/colorAccent</item> </style> - Vaithiya Nathan
@VaithiyaNathan 在应用程序主题级别更改属性意味着全局更改所有组件的此值。您只需为工具栏覆盖主题即可。此外,Material Components 使用 colorOnPrimary 作为工具栏图标的颜色。请查看原始问题中链接的答案。 - Gabriele Mariotti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接