Android Plusieurs thèmes dans une application


Exemple

En utilisant plus d’un thème dans votre application Android, vous pouvez ajouter des couleurs personnalisées à chaque thème pour qu’elles se présentent comme suit:

OneTheme TwoTheme

Tout d'abord, nous devons ajouter nos thèmes à style.xml comme ceci:

<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">

</style>

<!--  -->
<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >

</style>
......

Vous pouvez voir ci- dessus OneTheme et TwoTheme .

Maintenant, allez à votre AndroidManifest.xml et ajoutez cette ligne: android:theme="@style/OneTheme" à votre balise d' application , cela fera de OneTheme le thème par défaut:

<application
        android:theme="@style/OneTheme"
        ...>

Créez un nouveau fichier xml nommé attrs.xml et ajoutez ce code:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="custom_red" format="color" />
    <attr name="custom_blue" format="color" />
    <attr name="custom_green" format="color" />
</resources>
<!-- add all colors you need (just color's name) -->

Revenez à style.xml et ajoutez ces couleurs avec ses valeurs pour chaque thème:

<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="custom_red">#8b030c</item>
    <item name="custom_blue">#0f1b8b</item>
    <item name="custom_green">#1c7806</item>
</style>

<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >
    <item name="custom_red">#ff606b</item>
    <item name="custom_blue">#99cfff</item>
    <item name="custom_green">#62e642</item>
</style>

Maintenant, vous avez des couleurs personnalisées pour chaque thème, ajoutons ces couleurs à nos vues.

Ajoutez la couleur custom_blue au TextView en utilisant "? Attr /":

Accédez à votre imageView et ajoutez cette couleur:

<TextView>
    android:id="@+id/txte_view"
    android:textColor="?attr/custom_blue" />

Mow, nous pouvons changer le thème par simple ligne setTheme(R.style.TwoTheme); cette ligne doit être avant setContentView() Procédé onCreate() méthode, comme celle - Activity.java :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.TwoTheme);
    setContentView(R.layout.main_activity);
    ....
}


changer de thème pour toutes les activités à la fois

Si nous voulons changer le thème pour toutes les activités, nous devons créer une nouvelle classe nommée MyActivity AppCompatActivity (ou Activity class) et ajouter line setTheme(R.style.TwoTheme); à la méthode onCreate () :

public class MyActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (new MySettings(this).isDarkTheme())
            setTheme(R.style.TwoTheme);
    }
}

Enfin, accédez à toutes vos activités, ajoutez toutes à la classe de base MyActivity :

public class MainActivity extends MyActivity {
    ....
}

Pour changer de thème, il suffit d'aller sur MyActivity et de modifier R.style.TwoTheme sur votre thème ( R.style.OneTheme , R.style.ThreeTheme ....).