Changer de theme de façon dynamique [Résolu]

Signaler
Messages postés
87
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
21 novembre 2020
-
Messages postés
87
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
21 novembre 2020
-
Bonjour à tous, je souhaiterais savoir si il existe un moyen de changer de thème dynamiquement, en fonction du choix de l'utilisateur, un peu comme ceci par exemple:

monLayout.setTheme(R.style.monTheme)



Merci à vous
Configuration: Linux / Firefox 82.0

6 réponses

Messages postés
14859
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 novembre 2020
2 789
Bonjour,

Bien sûr, c'est possible de le faire, la doc

public void onCreate(Bundle savedInstanceState) {
    setTheme(android.R.style.Theme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

Messages postés
87
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
21 novembre 2020
1
merci brunoCS je connaissais cette possibilité, mais comment faire si ma vue contient plusieurs layout comme ceci par exemple:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/layout1"
        android:theme="@style/fondBleu">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv1"/>

    </RelativeLayout>

   <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/layout2"
        android:theme="@style/fondBleu">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv2"/>

    </RelativeLayout>

     <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/layout3"
        android:theme="@style/fondBleu">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv3"/>

    </RelativeLayout>
</linearLayout>


et que je ne veuille changer le style que d'un seul layout en fonction du choix de l'utilisateur?
j'avais penser à créer un Intent pour sauvegarder le chois de l'utilisateur, puis de redémarrer l'activité ensuite en récupérant ces choix. Mais je ne pense vraiment pas que ce soit la meilleur façon de faire.
Messages postés
14859
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 novembre 2020
2 789
Un thème s'utilise sur l'app ou sur une Activity en globalité. Ce que tu veux, c'est changer le style d'une partie de l'écran ? Tu vas être obligé de recharger l'écran car le style s'applique au constructeur du composant graphique

TextView(this, null, 0, R.style.style)


j'avais penser à créer un Intent pour sauvegarder le chois de l'utilisateur, puis de redémarrer l'activité ensuite en récupérant ces choix. Mais je ne pense vraiment pas que ce soit la meilleur façon de faire.
Si, ça me parait bien. Sinon, l'autre solution est de supprimer toutes les vues et de les recréer une par une...
Messages postés
87
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
21 novembre 2020
1
Merci Bruno pour ces explications. Une dernière ptite question pour la route,
j'ai créer une ListView qui est générée à partir d'un class qui dérive de BaseAdapter

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/monRelativeLayout"
        android:theme="@style/fondBleu">
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/monBouton"/>
    
    </RelativeLayout>
    
    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listeTheme"/>
    
</LinearLayout>


est -il possible d'appliquer un style différent pour chaque RelativeLayout?
Messages postés
14859
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
19 novembre 2020
2 789
Désolé, je ne fais pas le lien entre ta
ListView
et tes
RelativeLayout
mais oui, (quasiment) tout est possible ;)

@+ 
Buno, Modérateur 
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai... 
The urgent is done, the impossible is underway. For miracles, provide for a delay...
Messages postés
87
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
21 novembre 2020
1
Ok je vais creuser un peu. Merci Bruno pour ces éclaircissements.