如何在不更改新工具栏中的操作溢出菜单文本颜色的情况下更改标题文本和按钮颜色?

How to change title text and buttons color WITHOUT changing action overflow menu text color in new Toolbar?

我在我的项目中使用 android.support.v7.widget.Toolbar。默认情况下,在浅色主题中,它有黑色操作溢出菜单图标、黑色标题和黑色溢出菜单文本颜色,就像那样(不要看导航图标 - 它是自定义的):

但是在我的应用程序中我需要它是白色的。 我在工具栏的样式中将 android:textColorPrimary 设置为白色:

<style name="Widget.My.Toolbar" parent="Widget.AppCompat.Toolbar">
    <item name="theme">@style/ThemeOverlay.My.Toolbar</item>
</style>

<style name="ThemeOverlay.My.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="android:textColorPrimary">@color/white</item>
</style>

它改变了标题和溢出菜单按钮的颜色,就像我想要的那样,但它也改变了 Action owerflow 菜单项文本颜色:

看起来很难看。 我什至尝试使用

以编程方式设置标题颜色
toolbar.setTitleTextColor(getResources.getColor(R.color.white);

但它只改变标题颜色,而不改变菜单按钮:

那么,除了操作溢出菜单中的项目外,我该如何更改工具栏中所有内容的颜色?

Toolbar 设置文本颜色后,您可以使用以下属性设置菜单的文本颜色:

<item name="actionMenuTextColor">@color/white</item>

由于您使用的是 AppCompat Toolbar,android 命名空间不需要包含在属性中,如上所示。

然而,人们似乎对此有不同的体验。您也可以尝试使用 itemTextAppearance 属性:

<style name="yourTheme" parent="yourThemeParent">
    <!-- Rest of your theme -->
    <item name="android:itemTextAppearance">@style/menuItemColor</item>
</style>

<style name="menuItemColor">
    <item name="android:textColor">@android:color/black</item>
</style>

当我在布局中明确包含 Toolbar 时,我发现第一个解决方案对我有用,但如果我使用 getSupportActionBar() 来获取给定主题中包含的默认栏,则不会。但是,在这种情况下,第二种解决方案对我有用。