43

Я использую библиотеку v7 appcompat 21, чтобы использовать новые стили материалов на устройствах, предшествующих Lollipop. Мой styles.xml выглядит так:Изменение цвета текста заголовка ActionBar с использованием темы Light.DarkActionBar в AppCompat 21

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:textColorPrimary">#ff0000</item> 
    <item name="android:textColorPrimaryInverse">#ff0000</item> 
</style> 

Я пытаюсь изменить цвет текста на панели действий. Но независимо от того, что я написал для textColorPrimary или textColorPrimaryInverse, цвет всегда белый. Если я наследую от Theme.AppCompat, я могу переопределить «textColorPrimary», и если я наследую от Theme.AppCompat.Light, я могу переопределить «textColorPrimaryInverse». Но ни одна из них не работает при использовании темы Light.DarkActionBar.

Я определенно использую AppTheme, потому что настройка атрибутов, таких как colorPrimary для изменения цвета фона панели задач, прекрасна. Я не использую никаких других файлов стиля классификатора ресурсов.

Я прорыл файлы стилей android и не могу понять, какой атрибут переопределить. Есть идеи? Это ошибка appcompat?

ответ

128

Вы можете изменить его с actionBarStyle атрибутом темы.

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> 
    <item name="actionBarStyle">@style/MyActionBar</item> 
</style> 

<style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar.Solid"> 
    <item name="titleTextStyle">@style/MyTitleTextStyle</item> 
</style> 

<style name="MyTitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"> 
    <item name="android:textColor">CHANGE_COLOR_HERE</item> 
</style> 
+0

Идеальное предложение, отлично работает! – FernandoPaiva

+1

Спасибо большое! Ваше решение - единственное, что сработало для меня. –

+23

По какой-то причине установка textColor так, как вы это делали, не имеет никакого эффекта при работе на Android 5 или устройстве Android 4 (это те, на которых я тестировал) - любые идеи? Я использую панель инструментов с AppCompatActivity и применяю выше тему в своем манифесте. – AgentKnopf

-3

Попробуйте это:

<item name="actionMenuTextColor">@color/red</item> 
+0

Это только цвет текста внутри меню переполнения. – Adam

4

убедитесь, что вы делаете изменения во всей вашей папке значения, такие как «значения-v11», «ценности-v14» и т.д .. если он существует.

Else убедитесь, что в приложении используется тот же самый «AppTheme», который вы показали выше.

Пожалуйста, напишите полный текст style.xml и код манифеста, ссылаясь на стиль, который даст больше информации о вашей проблеме.

Также вы можете попробовать установить приложение: тему и приложение: popupTheme атрибуты на вас ToolBar.

+4

'' работает! – sancho21

+0

Lifesaver! Большое спасибо - я полностью забыл о файлах v */styles.xml ... – tommus

21

Это сделает вашу панель инструментов Название использовать белый цвет:

<android.support.v7.widget.Toolbar 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" /> 

Чтобы понять, в чем разница между ThemeOverlay.AppCompat.Dark.ActionBar и Theme.AppCompat.Light.DarkActionBar проверки this answer

Это app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar", что применяется светлый цвет, так как название цвета, который используемый в этой теме белый.

+0

Этот ответ не очень специфичен в отношении того, что требуется для его работы. Какая часть его делает белой? Что, если кто-то хочет сделать его красным? Где указано приложение: префикс? –

+0

@Thibault D. Я добавил несколько подробностей к моему ответу. – vovahost

+0

Спасибо за ваш быстрый ответ, сегодня я сделаю снимок! –

4

Попробуйте добавить это в onCreate своей деятельности. Работает практически на всех версиях Android.

Для Java активность:

actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>")); 

Для фрагментов:

getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>")); 
1

Я использовал сгенерированный файл макета XML и не заметил, что атрибут android:theme был переопределен.

Вы проверили? :)