Программное изменение цвета фона панели инструментов не меняет цвет фона заголовка панели инструментов.

Я пытаюсь программно изменить цвет фона панели инструментов, выполнив следующие действия:

getSupportActionBar().setBackgroundDrawable(newColorDrawable(getResources().getColor(R.color.test_color_blue)));

И это результат:

до:

введите здесь описание изображения

После:

введите здесь описание изображения

Почему-то заголовок панели инструментов по-прежнему имеет тот же цвет фона, что и раньше.

вот моя панель инструментов xml:

<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="wrap_content"
android:gravity="center_vertical"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/Theme.Toolbar">

А вот Тема:

<style name="Theme.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:maxHeight">@dimen/abc_action_bar_default_height_material</item>
    <item name="android:background">@color/primary</item>
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@android:color/white</item>
    <item name="titleTextAppearance">@style/Theme.Toolbar.Title</item>
</style>

person EkKoZ    schedule 06.04.2015    source источник
comment
Применили ли вы какой-либо пользовательский стиль для панели действий в styles.xml, возможно, некоторые из них конфликтуют.   -  person Harry's Lab    schedule 06.04.2015
comment
выложи макет xml пожалуйста   -  person Heshan Sandeepa    schedule 06.04.2015
comment
@DavidJhons я опубликовал новые подробности по вопросам   -  person EkKoZ    schedule 06.04.2015


Ответы (4)


Измените свой код следующим образом:

toolbar.xml

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
        style="@style/MyToolbarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical">

Тема/стиль

<style name="MyToolbarStyle">
    <item name="android:maxHeight">@dimen/abc_action_bar_default_height_material</item>
    <item name="android:background">@color/primary</item>
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
    <item name="titleTextAppearance">@style/Theme.Toolbar.Title</item>
    <!-- No need for colorPrimary, colorPrimaryDark, colorAccent here
         this should go to the AppTheme -->
</style>

Результат

Перед установкой нового цвета фона:

изображение до изменения цвета фона

и после:

изображение после изменения цвета фона

person reVerse    schedule 09.04.2015
comment
Где вы разместили colorPrimary/PrimaryDark и т. д., то есть где вы разместили свою «AppTheme»? Кроме того, есть ли какая-то особая причина, по которой вы не устанавливаете родительскую тему? - person ThePersonWithoutC; 01.07.2016
comment
По сути, это просто пользовательский стиль, и я не хочу наследовать какие-либо атрибуты от другой темы, поэтому я не указываю родительскую тему. Относительно colorPrimary: это установлено в AppTheme, который используется приложением/действиями. По умолчанию Toolbar устанавливает фон в зависимости от атрибута colorPrimary, если вы не переопределяете его с помощью стиля. - person reVerse; 02.07.2016

Поздно, но надеюсь комментарий будет полезен

У меня было это item в моем стиле активности

<item name="android:background">someColor</item>

поэтому, когда я изменил цвет toolbar, заголовок и элементы меню не изменили фон. Я только что удалил этот item, и теперь он работает отлично.

У меня не было времени разбираться в деталях, но я думаю, что это может быть полезно кому-то еще.

person Igor Tyulkanov    schedule 20.02.2016
comment
Я обнаружил, что удаление этого действительно исправляет панель инструментов. Однако, как вы можете установить цвет фона без панировки панели инструментов? - person Richard Barraclough; 18.06.2020

используйте это для доступа к текстовому просмотру

public void changeToggleTitle() {
    if (mToolbar != null) {
        for(int i= 0; i < mToolbar.getChildCount(); i++){
            View v = mToolbar.getChildAt(i);
            if(v != null && v instanceof TextView){
                TextView t = (TextView) v;
                // Do the magic 
            }
        }
    }
}
person David Estevan Cardozo Jimenez    schedule 06.04.2015

В моем style я изменил

        <item name="android:background">@color/background</item>

to

        <item name="android:windowBackground">@color/background</item>

и это, кажется, исправило это для меня.

person Richard Barraclough    schedule 18.06.2020