Changer de theme de façon dynamique

Résolu
lamouchetsetse Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   -  
lamouchetsetse Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. BunoCS Messages postés 5034 Date d'inscription   Statut Modérateur Dernière intervention   3 930
     
    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);
    }
    

    0
  2. lamouchetsetse Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   2
     
    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.
    0
  3. BunoCS Messages postés 5034 Date d'inscription   Statut Modérateur Dernière intervention   3 930
     
    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...
    0
  4. lamouchetsetse Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   2
     
    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?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. BunoCS Messages postés 5034 Date d'inscription   Statut Modérateur Dernière intervention   3 930
     
    Désolé, je ne fais pas le lien entre ta
    ListView
    et tes
    RelativeLayout
    mais oui, (quasiment) tout est possible ;)

    0
  7. lamouchetsetse Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   2
     
    Ok je vais creuser un peu. Merci Bruno pour ces éclaircissements.
    0