Android – Changer l'app Theme sur onClick

Je sais qu'il existe un moyen de changer le thème par défaut de l'application sur le clic de bouton. Les développeurs Blackmart l'ont fait. J'ai déjà cherché Google comme 1000 pages, mais j'ai trouvé cela (ne fonctionne pas)

getApplication().setTheme(Theme.Holo) 

Comme j'ai déjà créé un nouveau style dans res / values ​​/ styles.xml, est-ce qu'il y a un autre moyen de le modifier dynamiquement? Même le redémarrage de l'application?

  • DialogFragment en plein écran avec StatusBar translucide
  • Comment déterminer la mémoire de texture maximale sur Android OpenGL ES
  • Texte avec dégradé dans Android
  • Voulez-vous animer l'écran de démarrage sur Android
  • En-têtes ListView sans séparateurs d'éléments de liste
  • Comment vérifier l'autorisation de licences Android d'autres applications
  • One Solution collect form web for “Android – Changer l'app Theme sur onClick”

    Le blog suivant peut résoudre votre problème:

    http://mrbool.com/how-tochange-the-layout-theme-of-an-android-application/25837

    Copier le code du blog pour une référence rapide:

    En supposant que vous avez déjà défini trois thèmes dans le fichier XML R.style.FirstTheme , R.style.SecondTheme et R.style.ThirdTheme

     import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; public class ChangeThemeActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Utils.onActivityCreateSetTheme(this); setContentView(R.layout.main); findViewById(R.id.button1).setOnClickListener(this); findViewById(R.id.button2).setOnClickListener(this); findViewById(R.id.button3).setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.button1: Utils.changeToTheme(this, Utils.THEME_DEFAULT); break; case R.id.button2: Utils.changeToTheme(this, Utils.THEME_WHITE); break; case R.id.button3: Utils.changeToTheme(this, Utils.THEME_BLUE); break; } } } 

    Laissez-nous écrire le code ci-dessous dans le fichier "Utils":

     import android.app.Activity; import android.content.Intent; public class Utils { private static int sTheme; public final static int THEME_DEFAULT = 0; public final static int THEME_WHITE = 1; public final static int THEME_BLUE = 2; /** * Set the theme of the Activity, and restart it by creating a new Activity of the same type. */ public static void changeToTheme(Activity activity, int theme) { sTheme = theme; activity.finish(); activity.startActivity(new Intent(activity, activity.getClass())); } /** Set the theme of the activity, according to the configuration. */ public static void onActivityCreateSetTheme(Activity activity) { switch (sTheme) { default: case THEME_DEFAULT: activity.setTheme(R.style.FirstTheme); break; case THEME_WHITE: activity.setTheme(R.style.SecondTheme); break; case THEME_BLUE: activity.setTheme(R.style.Thirdheme); break; } } } 

    J'espère que cela aide…

    EDIT 1:

    Voici la raison pour laquelle AlertDialog ne prend pas de thème personnalisé:

    L'implémentation dans Builder.create () est:

     public AlertDialog create() { final AlertDialog dialog = new AlertDialog(P.mContext); P.apply(dialog.mAlert); [...] } 

    Qui appelle le constructeur «sans objet» de AlertDialog, qui ressemble à ceci:

     protected AlertDialog(Context context) { this(context, com.android.internal.R.style.Theme_Dialog_Alert); } 

    Il existe un deuxième constructeur dans AlertDialog pour changer les thèmes:

     protected AlertDialog(Context context, int theme) { super(context, theme); [...] } 

    Que le constructeur n'appelle pas.

    Consultez la publication suivante pour trouver des correctifs plus pertinents.

    Comment modifier le thème de AlertDialog

    Voici la réponse la plus votée:

      new AlertDialog.Builder( new ContextThemeWrapper(context, android.R.style.Theme_Dialog)) 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.