web-dev-qa-db-fra.com

Modifier la couleur d'arrière-plan de la barre d'outils par programme ne modifie pas la couleur d'arrière-plan du titre de la barre d'outils

J'essaie de changer la couleur d'arrière-plan de la barre d'outils par programmation en procédant comme suit:

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

Et voici le résultat:

avant:

enter image description here

Après:

enter image description here

Certains comment le titre de la barre d'outils a toujours la même couleur d'arrière-plan qu'auparavant.

voici ma barre d'outils 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">

Et voici le thème:

<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>
22
EkKoZ

Modifiez votre code comme suit:

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">

Thème/Style

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

Résultat

Avant de définir la nouvelle couleur d'arrière-plan:

picture before background color change

et après:

picture after background color change

13
reVerse

Tard, mais j'espère que ce serait un commentaire utile

J'avais ce item dans mon style d'activité

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

donc quand j'ai changé toolbar la couleur, le titre et les éléments du menu n'ont pas changé l'arrière-plan. Je viens de supprimer ce item et maintenant cela fonctionne parfaitement.

Je n'ai pas eu le temps de comprendre les détails, mais je pense que cela pourrait être utile à quelqu'un d'autre.

5
Igor Tyulkanov

utilisez-le pour accéder à la vue textuelle

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 
            }
        }
    }
}
mToolbar.setBackgroundResource(mGameEnum.getPrimeColorRes());
0
Kai Wang