【问题标题】:Android Toolbar menu text colorAndroid 工具栏菜单文本颜色
【发布时间】:2017-09-02 17:36:07
【问题描述】:

我正在尝试在此处更改工具栏的菜单项文本颜色,但它不起作用。这是我的风格:

<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中设置Toolbar主题,但是菜单项还是回来了。有解决办法吗?

【问题讨论】:

  • 添加这个并告诉我@android:color/white

标签: android toolbar android-toolbar


【解决方案1】:

在您的 AppTheme 样式中添加这些行

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

【讨论】:

  • android:actionMenuTextColor 用于更高的 API 级别,如果您使用支持库,则使用 actionMenuTextColor
  • 但是为什么它在 AppTheme 中有效,但在 AppTheme.ToolbarStyle 中无效?
  • 我无法用这种方式更改 API 17 中的标题工具栏颜色!!
【解决方案2】:

拥有一个材质工具栏,您可以使用样式修改文本标题和菜单文本,如下所示:

<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>

最终的结果是这样的:

【讨论】:

  • 无法在我的主题中添加这个 @style/App.ToolbarMenuItem
【解决方案3】:

你需要像这样声明一个Theme

<style name="Theme.PopupOverlay.Menu" parent="ThemeOverlay.AppCompat.Light" >
    <item name="android:textColor">@android:color/white</item>
</style>

然后,在layout 视图中的Toolbar 中,您必须指定使用该主题

    <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" />

【讨论】:

    【解决方案4】:

    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 - 是将颜色应用于操作菜单项的关键

    【讨论】:

      【解决方案5】:

      在你的主题文件中你必须把这个:

      <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 级别。我已经添加了这个&lt;item name="actionMenuTextColor"&gt;@color/text_color&lt;/item&gt;,对于更高版本&lt;item name="android:actionMenuTextColor"&gt;@color/white&lt;/item&gt;
      • 没关系。这些行都不适用于工具栏主题。我必须直接将这些行添加到 AppTheme,然后一切正常。请检查接受的答案。
      【解决方案6】:

      为工具栏创建主题

      <style name="AppTheme.ActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
               ...
          <item name="actionMenuTextColor">@color/your_color_code</item>
               ...
       </style>
      

      并像这样将此主题应用到您的工具栏视图:

      <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:layout_width="match_parent"
         android:layout_height="?attr/actionBarSize"
         android:layout_gravity="top"
         android:theme="@style/AppTheme.ActionBar"/>
      

      【讨论】:

      • 您先生不专心。我已经尝试过了,但没有成功。
      • @ЄвгенГарастович 仅创建样式是不够的,您必须将该主题附加到工具栏,在您的代码中我可以看到您没有应用任何主题。
      • 我曾尝试在我的布局文件中直接应用主题,但没有成功。请注意问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多