Цвет текста ActionBar - PullRequest
       34

Цвет текста ActionBar

268 голосов
/ 02 мая 2011

как я могу изменить цвет текста панели действий?Я унаследовал тему Holo Light, я могу изменить фон ActionBar, но я не могу выяснить, что является атрибутом для изменения цвета текста.


Хорошо,Я могу изменить цвет текста с помощью атрибута android: textColorPrimary, но он также меняет цвет текста раскрывающегося меню, отображаемого при переполнении кнопок ActionBar.Любая идея, как изменить цвет этих выпадающего меню / Список?

Ответы [ 20 ]

439 голосов
/ 04 мая 2011

Хорошо, я нашел лучший способ. Теперь я могу изменить только цвет заголовка. Вы также можете настроить субтитры.

Вот мой файл styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
  </style>

  <style name="MyTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
  </style>

  <style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">@color/red</item>
  </style>
</resources>
93 голосов
/ 25 октября 2013

Я нашел способ, который хорошо работает с любым ароматом ActionBar ( Шерлок , Compat и Native ):

Просто используйте html , чтобы установить заголовок и указать цвет текста. Например, чтобы установить цвет текста ActionBar на красный, просто сделайте это:

getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>"));

Вы также можете использовать красный шестнадцатеричный код #FF0000 вместо слова red. Если у вас возникли проблемы с этим, см. Android Html.fromHtml (String) не работает для текста .


Кроме того, если вы хотите использовать цветовой ресурс, этот код можно использовать для получения правильной строки HEX и удаления альфа, если необходимо (тег font не поддерживает альфа):

int orange = getResources().getColor(R.color.orange);
String htmlColor = String.format(Locale.US, "#%06X", (0xFFFFFF & Color.argb(0, Color.red(orange), Color.green(orange), Color.blue(orange))));
93 голосов
/ 10 февраля 2012

У меня была та же проблема, что и у вас, это тема Holo.Light, но я хотел стилизовать цвет ActionBar, поэтому мне нужно было изменить цвет текста, а также заголовок и меню.Итак, в конце я пошел в git hub и просматривал исходный код, пока не нашел чертовски правильный стиль:

<?xml version="1.0" encoding="utf-8"?>
<!-- For honeycomb and up -->
<resources>

    <style name="myTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/myTheme.ActionBar</item>
        <item name="android:actionMenuTextColor">@color/actionBarText</item>
    </style>

    <style name="myTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">@drawable/actionbarbground</item>
        <item name="android:titleTextStyle">@style/myTheme.ActionBar.Text</item>
    </style>

    <style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance">
        <item name="android:textColor">@color/actionBarText</item>
    </style>

</resources>

, так что теперь все, что вам нужно сделать, это установить все, что вы захотите @color/actionBarText и @drawable/actionbarbground!

66 голосов
/ 11 ноября 2012

Код ActionBar ID не доступен напрямую, поэтому вам придется немного взломать здесь.

int actionBarTitleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
if (actionBarTitleId > 0) {
    TextView title = (TextView) findViewById(actionBarTitleId);
    if (title != null) {
        title.setTextColor(Color.RED);
    }
}
29 голосов
/ 23 декабря 2015

Это старая тема, но для будущих читателей с помощью панели инструментов все очень просто:

Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.someColor));
setSupportActionBar(toolbar);
27 голосов
/ 21 июня 2014

я сделал простой однострочный код

actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>"));
26 голосов
/ 27 января 2014

Добавьте его в корень панели действий.У меня была эта проблема.

<style name="ActionBar" parent="@style/Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="actionMenuTextColor">@color/stdDarkBlueText</item>
</style>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="titleTextStyle">@style/ActionBarTitleText</item>
    <item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>

<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/stdDarkBlueText</item>
    <item name="android:textSize">12sp</item>
</style>

<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
    <item name="android:textColor">@color/stdDarkBlueText</item>
    <item name="android:textSize">12sp</item>
</style>

actionMenuTextColor - изменяет цвет текста для текста панели действий, он никогда не работал, когда он был частью Widget.Styled.ActionBar, поэтому мне пришлось добавить его в корень.Другие 2 атрибута изменяют заголовок и подзаголовок панели действий.

17 голосов
/ 18 декабря 2014

Настройка строки HTML на панели действий не работает для темы Материал в SDK v21 +

Если вы хотите изменить его, вы должны установить основной цвет текста в вашем style.xml

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="android:Theme.Material.Light">
        <!-- Customize your theme here. -->
        <item name="android:textColorPrimary">@color/actionbar-text-color</item>
    </style>
</resources>    
12 голосов
/ 16 ноября 2013

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

<item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>

Люди, которые хотят получить тот же результат для библиотеки AppCompat, вот что я использовал:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomActivityTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="actionBarStyle">@style/MyActionBar</item>
        <!-- other activity and action bar styles here -->
    </style>

    <!-- style for the action bar backgrounds -->
    <style name="MyActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:background">@drawable/actionbar_background</item>
        <item name="background">@drawable/actionbar_background</item>
        <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
     </style>
    <style name="MyTheme.ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/color_title</item>
      </style>
</resources>
11 голосов
/ 03 января 2017

Самый простой способ - это сделать в файле styles.xml.

В шаблоне Google styles.xml в настоящее время создается следующее:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

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

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

Если вы хотите настроить цвет на что-то другое, вы можете указать свой собственныйcolor in colors.xml или даже используйте встроенный цвет из Android с помощью атрибута android: textColorPrimary:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item>
</style>


<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColorPrimary">@android:color/darker_gray</item>
</style>

Примечание. При этом изменяется цвет заголовка, а также заголовков любых элементов MenuItem, отображаемых вActionBar.

...