2015-04-06 8 views
20

я пытаюсь изменить цвет фона панели инструментов программно это сделать:Изменить цвет фона панели инструментов программно не изменить панель заголовка цвет фона

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

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

перед:

enter image description here

После:

enter image description here

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

вот моя панель инструментов 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> 
+0

Вы применили какой-либо пользовательский стиль для панели действий в styles.xml, возможно, некоторые из них противоречат друг другу. – Harry

+0

Опубликовать свой макет xml please –

+0

@DavidJhons Я разместил новую информацию по вопросам – EkKoZ

ответ

4

использовать это для получения доступа к TextView

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

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

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> 

Результат

Перед с Эттинг новый цвет фона:

picture before background color change

и после:

picture after background color change

+0

Где вы поместили colorPrimary/PrimaryDark и т. Д., Где вы разместили свой «AppTheme»? Также есть ли какая-то особая причина, по которой вы не устанавливаете родительскую тему? – ThePersonWithoutC

+1

Это обычный пользовательский стиль, и я не хочу наследовать какие-либо атрибуты из другой темы, поэтому я не указываю родительскую тему. Что касается 'colorPrimary': это установлено в AppTheme, которое используется приложением/действиями. По умолчанию «Панель инструментов» устанавливает фон в зависимости от атрибута «colorPrimary», если вы не переопределите его со стилем. – reVerse

4

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

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

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

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

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

0
mToolbar.setBackgroundResource(mGameEnum.getPrimeColorRes());