Цвет текста пункта меню панели действий

Как изменить цвет текста заголовка пункта меню. Я попытался изменить это, как показано ниже

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

Но он меняет цвет только текста заголовка панели действий, но не текста пункта меню.


person Procurares    schedule 02.08.2013    source источник
comment
См. Это сообщение: stackoverflow.com/questions/6072226/   -  person PSchuette    schedule 26.01.2015
comment
Обратитесь к этому ответу: stackoverflow.com/a/35154585/1684864 Это может вам помочь.   -  person Mihir Trivedi    schedule 02.02.2016


Ответы (11)


Попробуйте что-то вроде этого:

<style name="ThemeName" parent="@style/Theme.Sherlock.Light">
    <item name="actionMenuTextColor">@color/white</item>
    <item name="android:actionMenuTextColor">@color/white</item>
</style>
person Deimantas Brandišauskas    schedule 02.08.2013
comment
Отлично, это мне очень помогает! - person Procurares; 02.08.2013
comment
Обратите внимание, что это может быть ColorStateList, как описано здесь developer.android.com/ ссылка / android / content / res /. - person QED; 04.01.2014
comment
Есть идеи, как можно программно изменить цвет текста? Я пробовал использовать SpannableString с SetSpan (New Forground ... (), но это не сработало. - person Subby; 12.05.2014
comment
Я не обнаружил, что неквалифицированный actionMenuTextColor был необходим (возможно, это что-то для Шерлока. Я действительно обнаружил, что вы ДОЛЖНЫ поместить элемент android:actionMenuTextColor в тему верхнего уровня, на которую есть ссылка в вашем манифесте. У меня был мой в группе ActionBarStyle ‹style›, и он НЕ работал там. - person Colin M.; 24.09.2014
comment
У меня android:actionMenuTextColor был черный цвет по умолчанию, добавление дополнительной записи без android заставило его работать. Странный... - person JakeWilson801; 19.04.2016
comment
Для Api21 и выше используйте ..... ‹item name = android: textColorPrimary› @ color / white ‹/item› - person Dinesh; 24.09.2016
comment
Я обнаружил, что Unqualified actionMenuTextColor необходимо для вступления в силу на Android 5 - person Codelicious; 17.08.2020

Я пробовал несколько вещей, но ничего не помогло. Наконец-то это сработало:

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

Я не использовал темы Шерлока. Это сработало для Holo.Light.DarkActionBar.

person b00n12    schedule 06.10.2013
comment
+1. В отличие от принятого ответа, это отлично сработало для меня на Android 4.0+, используя Holo.Light в качестве базовой темы. - person Jonik; 11.01.2014
comment
Что-нибудь еще нужно сделать? Я добавляю это в свой файл styles.xml, но он вообще не работает. Я тоже не использую темы Шерлока. Вот что я сделал: ‹style name = AppTheme parent = Theme.MyTheme› ‹item name = android: itemTextAppearance› @ style / TextAppearance ‹/item› ‹/style› ‹имя стиля = TextAppearance› item ‹name = android: textColor ›@Android: color / darker_gray ‹/item› ‹/style› - person Bagusflyer; 19.02.2014
comment
Как выглядит ваш файл styles.xml? - person b00n12; 20.02.2014
comment
Наконец, после просмотра десятков решений, которые либо не работают (для меня), либо предназначены для ActionBarSherlock, это работает. - person user1987392; 20.11.2014
comment
Эта штука так странно работает, но я просто не знаю почему. Закройте глаза и верьте. - person ; 01.10.2015
comment
Ух ты. Спасибо, что сэкономили мое время. - person dev1993; 02.01.2017
comment
У меня это сработало, спасибо! Но серьезно, как может быть так сложно изменить цвет текста очень специфического элемента управления? И почему так много разных решений, которые, кажется, работают для одних, а для многих - нет? Это безумие! - person sdippl; 23.02.2017
comment
Это сработало для меня. Я использую Theme.MaterialComponents.Light.NoActionBar. - person Prabhat; 14.09.2020

После того, как я попробовал все это, и они не работали, я сделал это программно следующим образом:

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.wither-color-you-want, чтобы изменить его на любой цвет, который вы хотите.

person Alex K    schedule 17.09.2014
comment
@kenyee какая версия Android? - person Alex K; 07.12.2014
comment
@kenyee интересно. Я использовал этот код в приложении 4.4.x для работы. У меня это сработало. - person Alex K; 29.12.2014
comment
@Hammer какая версия андроида? - person Alex K; 17.01.2015
comment
@Hammer Хорошо, я проведу небольшое расследование и выясню, почему это может не работать - person Alex K; 17.01.2015
comment
Работал у меня. Манипуляции со стилем тоже работали, но я не нашел способа изменить цвет пункта меню без изменения цвета заголовка панели действий. Однако это странно. - person LVR; 26.01.2017

Чтобы обновить цвет текста пункта меню, вам необходимо внести изменения в themes.xml. Следующий ответ - для sherlock.actionbar. В вашем файле themes.xml добавьте следующие строки:

<style name="Theme.Mytheme" parent="@style/Theme.Sherlock">
    <item name="actionMenuTextColor">@color/mycolor</item>     
    <item name="android:actionMenuTextColor">@color/mycolor</item>
</style> 
person Vikas    schedule 22.09.2014
comment
Зачем item name="actionMenuTextColor" это необходимо? - person IgorGanapolsky; 27.10.2015

это сработало для меня:

<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> 
person kajlaminog    schedule 13.11.2014

Если 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>
person Alexander Zhak    schedule 16.08.2014

пожалуйста, используйте приведенный ниже код, он работает

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

person Upendranath Reddy    schedule 22.11.2016

Добавьте следующую строку кода в свой файл стиля .xml, который изменит цвет текста меню параметров на черный:

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

У меня работает, спасибо.

person AMI CHARADAVA    schedule 14.02.2017

вы можете изменить цвет элемента действия, просто выполнив следующую строку

<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>
person DjP    schedule 28.03.2016

Если вы используете DarkActionBar, добавьте две строки ниже в свой style.xml

  1. @color/green
    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>

person Divyaadz    schedule 28.05.2018

Вы можете установить цвет программно. Надеюсь, это вам поможет.

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);
            }

        }
    });
}
person Victor Choy    schedule 13.05.2017