Android - 更改MaterialToolbar菜单项图标颜色

13

我目前正在创建一个应用程序,其中包含一个MaterialToolbar小部件。我想将图标颜色设置为白色。

我尝试按照此问题中接受的答案进行操作,但它不起作用。在styles.xml中添加colorControlNormal也无效。

这是我的MaterialToolbar xml代码:

<com.google.android.material.appbar.MaterialToolbar
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/topToolbar"
            android:background="@color/colorPrimaryDark"
            app:title="Revo"
            app:titleTextColor="@android:color/white"
            app:menu="@menu/menu_floatingsearchview"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

我该怎么办?

编辑,解决方案和解释

感谢大家的好答案。我找到了一种解决方案,其中包括两个解决方案以及另一个问题。

这个问题中,问为什么colorControlNormal不起作用。被接受的答案说,在矢量线中,您必须更改赋给android:fillColor的值,并将其替换为?attr/colorControlNormal。通过执行此技巧,项目colorControlNormal将控制所需图标的颜色。

在应用程序main样式中,您需要放置:

<item name="colorControlNormal">@android:color/white</item>

然后,在所需的图标下,您需要在path下放置:

android:fillColor="?attr/colorControlNormal"

就这样!现在图标将获得赋予colorControlNormal属性的颜色!


你指的是哪些图标?请查看 https://stackoverflow.com/questions/58074174/how-to-change-the-navigation-icon-color/58074791#58074791 - Gabriele Mariotti
@GabrieleMariotti 我指的是工具栏右侧的两个图标,它们包含在名为menu_floatingsearchview的菜单xml文件中。我需要更新线程与菜单代码吗? - Meltix
请回答你的问题。在问题中很容易忽略答案。 - John Glen
2个回答

14

您可以使用:

    <com.google.android.material.appbar.MaterialToolbar
        app:menu="@menu/toolbar_menu"
        style="@style/Widget.MaterialComponents.Toolbar.Primary
        android:theme="@style/MyThemeOverlay_Toolbar"
        .../>

与:

<style name="MyThemeOverlay_Toolbar" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <!-- color used by navigation icon and overflow icon -->
    <item name="colorOnPrimary">@color/....</item>
</style>

这里输入图片描述


由于某种原因,这个方法似乎不起作用。这是大多数开发人员使用的另一种方法,被许多人提出。但是这个方法就是不起作用... - Meltix
@Meltix 你正在使用哪个版本的材料组件? - Gabriele Mariotti
<item name="colorOnPrimary">...</item> 这部分对我没用。使用 <item name="iconTint">...</item> 取而代之可以正常工作。 - Robyer
@Robyer 如果您正在使用主题叠加(android:theme),则 colorOnPrimary 可以正常工作。如果您使用的是样式(style),则应使用 iconTint。它们是完全不同的。 - Gabriele Mariotti
1
@GabrieleMariotti 我一开始使用的是 android:theme,但我刚刚意识到了不同之处。colorOnPrimary 确实会改变工具栏标题和溢出菜单图标本身的颜色,但它对从菜单 XML 资源填充的菜单项图标没有影响 - 它们的颜色只能通过更改 iconTint 属性来改变。 - Robyer
显示剩余7条评论

2

几天前我遇到了这个问题。

  1. 将所需的颜色设置为 colors.xml 中的变量:

    <color name="toolbarTextColor">#ffffff</color>

  2. 然后在 drawable 的源代码中直接设置这个颜色:

    android:fillColor="@color/toolbarTextColor"

  3. 同时,在设置 MaterialToolbar 文本颜色时也使用同一个变量。

这样,图标的颜色总是与文本相同,这应该是您想要的。否则,请使用另一个变量。


这绝对有效!在接受你的答案之前,我还在等待其他回复,谢谢! - Meltix

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