web-dev-qa-db-fra.com

Comment changer le thème de la barre d'outils AppCompat v21 par programme?

Ceci est ma barre d'outils xml

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"

    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    app:contentInsetEnd="0dp"
    app:contentInsetStart="0dp"
    Android:layout_height="@dimen/toolbar_height"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    Android:background="@color/primary_color">



</Android.support.v7.widget.Toolbar>

Je veux changer app: theme par programme. Comment puis-je faire cela?

19
Shane Ekanayake

Vous pouvez le faire par programme ou avec style:

Toolbar toolbar; // your toolbar
toolbar.setBackgroundColor(newColor); // i don't tested this method. Write if it's not working
toolbar.setTitleTextColor(titleColor); // if toolbar is white set title to black, if toolbar is black set title to white

Ou vous pouvez le faire avec style:

Ajoutez attrs.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="toolbarStyle" format="reference"/>
</resources>

Et maintenant changez toolbar.xml:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"

    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    app:contentInsetEnd="0dp"
    app:contentInsetStart="0dp"
    Android:layout_height="@dimen/toolbar_height"
    app:theme="?attr/toolbarStyle"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    Android:background="@color/primary_color">



</Android.support.v7.widget.Toolbar>

Et dans styles.xml (si vous ne l'avez pas, créez-le):

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyStyle.Dark" parent="AppCompat.Theme">
        <item name="toolbarStyle">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
    </style>
    <style name="MyStyle.Light" parent="AppCompat.Theme.Light">
        <item name="toolbarStyle">@style/ThemeOverlay.AppCompat.Light.ActionBar</item>
    </style>
</resources>

Si vous sélectionnez une deuxième méthode (avec des styles), vous devez redémarrer l'activité et utiliser la méthode setTheme avant super.onCreate ()

J'espère que je t'ai aidé.

22
krystian71115

Utilisez l'extrait de code suivant pour ajouter un thème:

Toolbar toolbar;
toolbar.getContext().setTheme(R.style.ThemeOverlay_AppCompat_Dark_ActionBar);
18
John Ruban Singh