【问题标题】:Action Bar menu item text color操作栏菜单项文本颜色
【发布时间】:2013-08-03 14:42:39
【问题描述】:

如何更改菜单项标题的文本颜色。我试图改变它如下

<style name="Theme.Kanku.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">@color/white</item>
</style>

但它只改变操作栏标题文本的颜色,而不是菜单项文本。

【问题讨论】:

标签: android android-actionbar android-menu android-styles


【解决方案1】:

试试这样的:

<style name="ThemeName" parent="@style/Theme.Sherlock.Light">
    <item name="actionMenuTextColor">@color/white</item>
    <item name="android:actionMenuTextColor">@color/white</item>
</style>

【讨论】:

  • 太好了,对我帮助很大!
  • 请注意,这可以是一个 ColorStateList,如此处所述developer.android.com/reference/android/content/res/…
  • 知道如何以编程方式更改文本颜色吗?我曾尝试将 SpannableString 与 SetSpan(New Forground...() 一起使用,但它不起作用。
  • 我没有发现不合格的“actionMenuTextColor”是必要的(也许这是夏洛克的东西”。我确实发现您必须将 android:actionMenuTextColor 项目放在清单中引用的顶级主题中. 我在ActionBarStyle
  • 供Api21及以上使用..... @color/white
【解决方案2】:

我尝试了几件事,但对我没有任何帮助。终于成功了:

<style name="your_theme" parent="your_parent">
    <item name="android:itemTextAppearance">@style/TextAppearance</item>
</style>

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

我没有使用 Sherlock 主题。这适用于 Holo.Light.DarkActionBar。

【讨论】:

  • +1。与公认的答案不同,这对我在 Android 4.0+ 上运行良好,使用 Holo.Light 作为基本主题。
  • 还有什么需要做的吗?我将它添加到我的styles.xml 中,但它根本不起作用。我也没有使用 Sherlock 主题。这就是我所做的:
  • 你的styles.xml是什么样的?
  • 那东西工作起来很奇怪,但就是不知道为什么。闭上眼睛相信吧。
  • 这对我有用,谢谢!但是说真的,改变一个非常具体的控件的文本颜色怎么会这么难呢?为什么有这么多不同的解决方案似乎对某些人有效而对其他许多人无效?这太疯狂了!
【解决方案3】:

在尝试了所有这些并让它们不起作用之后,我以这样的方式进行了编程:

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.changeip_card_menu, menu); 
    for(int i = 0; i < menu.size(); i++) {
        MenuItem item = menu.getItem(i);
        SpannableString spanString = new SpannableString(menu.getItem(i).getTitle().toString());
        spanString.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanString.length(), 0); //fix the color to white
        item.setTitle(spanString);
    }
    return true;
}

这将每次都动态工作。在这种情况下,文本颜色变为白色。简单,将 Color.WHITE 更改为 Color.whatever-color-you-want 将其更改为您想要的任何颜色。

【讨论】:

  • @kenyee 哪个版本的Android?
  • @kenyee 很有趣。我在 4.4.x 应用程序中使用此代码进行工作。对我来说效果很好。
  • @Hammer 哪个版本的android?
  • @Hammer 好的,我会做一些调查并找出它可能不起作用的原因
  • 为我工作。样式操作也有效,但我没有找到在不更改操作栏标题颜色的情况下更改菜单项颜色的方法。然而,这很奇怪。
【解决方案4】:

要更新菜单项文本颜色,您需要在 theme.xml 中进行更改。以下答案适用于 sherlock.actionbar。在您的主题.xml 文件中添加以下行:

<style name="Theme.Mytheme" parent="@style/Theme.Sherlock">
    <item name="actionMenuTextColor">@color/mycolor</item>     
    <item name="android:actionMenuTextColor">@color/mycolor</item>
</style> 

【讨论】:

  • 为什么需要item name="actionMenuTextColor"
【解决方案5】:

这对我有用:

<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:textAppearanceLargePopupMenu">@style/MyOverflowItemCollor</item>       
</style>

<style name="MyOverflowItemCollor" parent="android:TextAppearance.Holo.Widget.PopupMenu.Large">
    <item name="android:textColor">#ffffff</item>
</style> 

【讨论】:

    【解决方案6】:

    如果 AppTheme 是 android:Theme.Holo.Light.DarkActionBar,那么你需要设置自定义 actionBarWidgetTheme 来改变动作菜单样式。像这样:

    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
        <item name="android:actionBarWidgetTheme">@style/ActionBarWidget</item>
        <item name="android:actionMenuTextColor">@color/{custom_menu_item_text_color}</item>
    </style>
    
    <style name="MenuItemText">
        <item name="android:textColor">@color/{custom_menu_item_text_color}</item>
    </style>
    
    <style name="ActionBarWidget" parent="@android:style/Theme.Holo">
        <item name="android:itemTextAppearance">@style/MenuItemText</item>
    </style>
    

    【讨论】:

      【解决方案7】:

      请使用下面的代码

      <!-- Base application theme. -->
      <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
          <!-- Customize your theme here. -->
      
          <item name="colorPrimary">@color/colorWhite</item>
          <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
          <item name="colorAccent">@color/colorPrimaryDark</item>
          <item name="android:actionMenuTextColor">@color/colorWhite</item>
      </style>
      

      【讨论】:

        【解决方案8】:

        将以下代码行添加到您的 style.xml 文件中,将选项菜单文本颜色更改为 black

         <style name="optionMenuTextApearance" parent="@android:style/TextAppearance.Widget.IconMenu.Item">
            <item name="android:textColor">@color/colorBlack</item>
        </style>
        

        然后将这一行代码添加到您的主题中以更改选项菜单文本的颜色:

                <item name="android:itemTextAppearance">@style/optionMenuTextApearance</item>
        

        它对我有用,谢谢。

        【讨论】:

          【解决方案9】:

          如果您使用 DarkActionBar 在您的 style.xml 中添加以下两行

          1. @颜色/绿色
            1. @color/green

          完整代码如下

          <!-- Base application theme. -->
          <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
              <!-- Customize your theme here. -->
              <item name="colorPrimary">@color/colorPrimary</item>
              <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
              <item name="colorAccent">@color/colorAccent</item>
          
              <item name="actionMenuTextColor">@color/green</item>
              <item name="android:actionMenuTextColor">@color/green</item>
          </style>
          

          【讨论】:

            【解决方案10】:

            您可以简单地通过以下行更改操作项颜色

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

            你可以这样申请。

            <style name="your_theme" parent="your_parent">
            <item name="android:actionMenuTextColor">@color/selected_text_color</item>
            </style>
            

            就我而言

            <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
              <item name="android:actionMenuTextColor">@color/selected_text_color</item>
              </style>
            

            【讨论】:

              【解决方案11】:

              您可以以编程方式设置颜色。希望对你有帮助。

              private static void setMenuTextColor(final Context context, final Toolbar toolbar, final int menuResId, final int colorRes) {
                  toolbar.post(new Runnable() {
                      @Override
                      public void run() {
                          View settingsMenuItem =  toolbar.findViewById(menuResId);
                          if (settingsMenuItem instanceof TextView) {
                              if (DEBUG) {
                                  Log.i(TAG, "setMenuTextColor textview");
                              }
                              TextView tv = (TextView) settingsMenuItem;
                              tv.setTextColor(ContextCompat.getColor(context, colorRes));
                          } else { // you can ignore this branch, because usually there is not the situation
                              Menu menu = toolbar.getMenu();
                              MenuItem item = menu.findItem(menuResId);
                              SpannableString s = new SpannableString(item.getTitle());
                              s.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, colorRes)), 0, s.length(), 0);
                              item.setTitle(s);
                          }
              
                      }
                  });
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-01-14
                • 1970-01-01
                • 1970-01-01
                • 2014-09-11
                • 2015-03-31
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多