2015-04-06 202 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 2015-04-06 09:10:54

+0

張貼您的佈局xml請 – 2015-04-06 14:27:36

+0

@DavidJhons我已經發布了有關問題的新細節 – EkKoZ 2015-04-06 15:11:47

回答

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> 

結果

年代以前ETTING新的背景色:

picture before background color change

後:

picture after background color change

+0

您在哪裏放置了colorPrimary/PrimaryDark等,即您將「AppTheme」放置在哪裏? 此外,有沒有什麼特別的原因,你不設置父母主題? – ThePersonWithoutC 2016-07-01 02:50:17

+1

它基本上只是一種自定義風格,我不想從其他主題繼承任何屬性,因此我沒有指定父主題。關於'colorPrimary':這是在應用程序/活動使用的AppTheme中設置的。默認情況下,「工具欄」根據「colorPrimary」屬性設置背景,除非您不用樣式重寫它。 – reVerse 2016-07-02 08:15:07

4

晚了,但我希望這將是有益的評論

我在我的活動風格

有這個 item
<item name="android:background">someColor</item> 

所以當我改變toolbar顏色時,標題和菜單項沒有改變背景。 我剛剛刪除了這個item,現在它完美。

我沒有時間瞭解細節,但我認爲這可能對其他人有用。

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