Android 工具栏菜单文本颜色

28

我在这里尝试更改我的工具栏菜单项的文本颜色,但它不起作用。这是我的样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="toolbarStyle">@style/AppTheme.ToolbarStyle</item>
    <item name="buttonStyle">@style/AppTheme.ButtonStyle</item>
    <item name="colorControlHighlight">@color/colorPrimary</item>
</style>
<style name="AppTheme.ToolbarStyle" parent="Base.Theme.AppCompat.Light.DarkActionBar">
    <item name="android:background">@color/colorPrimary</item>
    <item name="titleTextColor">@android:color/white</item>
    <item name="titleTextAppearance">@style/TextAppearance.AppCompat.Widget.ActionBar.Title
    </item>
    <item name="actionMenuTextColor">@android:color/white</item>
</style>

布局XML:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:title="@string/app_name"
    app:titleMarginStart="@dimen/margin_l"
    />
我已经试图直接在xml中设置工具栏主题,但菜单项仍然是默认的。有没有解决方法?

在此输入图片描述


请添加以下内容并告知我:<item name="colorControlNormal">@android:color/white</item>。 - Aishwarya Tiwari
6个回答

25

在你的AppTheme样式中添加以下行

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

2
android:actionMenuTextColor 用于较高的 API 级别,如果您在使用支持库,则使用 actionMenuTextColor - Abid Khan
2
但是为什么它在AppTheme中有效,而在AppTheme.ToolbarStyle中无效呢? - Євген Гарастович
我无法通过这种方式在API 17中更改标题工具栏颜色!! - milad salimi

12

拥有一个材料设计工具栏,您可以通过以下方式对样式进行修改以及修改文本标题和菜单文本:

<com.google.android.material.appbar.MaterialToolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?actionBarSize"
    android:background="@android:color/white"
    android:elevation="6dp"
    android:theme="@style/App.ToolbarStyle"
    app:titleTextAppearance="@style/App.ToolbarTitleTex"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:menu="@menu/create_item_menu"
    app:titleTextColor="@android:color/black" />

这种样式允许您更改左侧图标的颜色:

<style name="App.ToolbarStyle" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <item name="colorOnPrimary">@color/colorPrimary</item>
</style>

您还可以使用另一种样式更改标题文本的外观:

<style name="App.ToolbarTitleTex" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <item name="android:textSize">18sp</item>
    <item name="fontFamily">@font/roboto_bold</item>
</style>

最后,要更改菜单项样式,您需要将此项属性添加到应用程序的主样式/主题中(即您在AndroidManifest文件中设置的样式/主题):

<item name="actionMenuTextAppearance">@style/App.ToolbarMenuItem</item>

使用:

<style name="App.ToolbarMenuItem" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <item name="android:textSize">14sp</item>
    <item name="fontFamily">@font/roboto_bold</item>
    <item name="textAllCaps">true</item>
    <item name="android:textStyle">bold</item>
</style>

最终的结果会像这样:enter image description here

无法将此添加到我的主题中:<item name="actionMenuTextAppearance">@style/App.ToolbarMenuItem</item>。 - King of Masses

9

在Material3主题下的现代方法。

<style name="AppTheme" parent="Theme.Material3.Dark">
    <item name="toolbarStyle">@style/ToolBarStyle</item>
...
</style>
<style name="ToolBarStyle" parent="@style/Widget.Material3.Toolbar">
    <item name="titleTextColor">@android:color/holo_green_light</item>
    <item name="navigationIconTint">@android:color/holo_blue_light</item>
    <item name="materialThemeOverlay">@style/ToolbarThemeOverlay</item>
</style>
<style name="ToolbarThemeOverlay" parent="">
    <item name="actionMenuTextColor">@android:color/holo_red_light</item>
</style>

materialThemeOverlay - 是应用颜色到操作菜单项的关键

enter image description here

9
您需要像这样声明一个主题(Theme)
<style name="Theme.PopupOverlay.Menu" parent="ThemeOverlay.AppCompat.Light" >
    <item name="android:textColor">@android:color/white</item>
</style>

接下来,在布局视图中的工具栏中,你必须指定使用该主题。

    <androidx.appcompat.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/Theme.PopupOverlay.Menu" />

0
要根据@Osvel Alvarez Jacomino的回答来控制整个文本的外观,您应该按照以下步骤进行操作:
定义您的TopAppBar主题:
<style name="TopAppBar" parent="@style/Widget.Material3.Toolbar">
        <item name="popupTheme">@style/Theme.PopupOverlay.Menu</item>
</style>

PopupTheme应该使用以下属性:

<style name="Theme.PopupOverlay.Menu" parent="ThemeOverlay.Material3.Light">
        <item name="textAppearanceSmallPopupMenu">@style/TypographyStyle</item>
        <item name="textAppearanceLargePopupMenu">@style/TypographyStyle</item>
</style>

排版风格可能看起来像这样:
<style name="TypographyStyle" parent="TextAppearance.Material3.BodyLarge">
        <item name="android:textColor">@android:color/darker_gray</item>
        <item name="android:letterSpacing">0.02</item>
</style>

-1
在您的主题文件中,您必须放置以下内容:
<style name="AppTheme.ActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
         ...
    <item name="actionMenuTextColor">@color/text_color</item>
         ...
 </style>

并将上述主题应用于工具栏视图,如下所示:android:theme="@style/AppTheme.ActionBar"

详细示例:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:id="@+id/main_toolbar"
   android:layout_width="match_parent"
   android:layout_height="?attr/actionBarSize"
   android:background="?attr/colorPrimary"
   android:layout_gravity="top"
   app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
   android:theme="@style/AppTheme.ActionBar"/>

这不是正确的答案。我已经尝试过了。你必须仔细阅读问题。 - Євген Гарастович
@ЄвгенГарастович 好的,但您没有提供您所针对的API级别。我已添加了此 <item name="actionMenuTextColor">@color/text_color</item>,对于更高版本,使用 <item name="android:actionMenuTextColor">@color/white</item> - Bipin Vayalu
没关系。这两行都不适用于工具栏主题。我不得不直接将这些行添加到AppTheme中,然后一切正常了。请检查已接受的答案。 - Євген Гарастович

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