Je tente d'obtenir un thème choisi par l'utilisateur et se sentir comme si je suis frustrant. Définir le thème AndroidManifest.xml
fonctionne comme il se doit, mais (comme je le peux dire) ne peut pas changer en fonction des préférences d'applications:Changement de thème à l'échelle de l'application par programme?
<application
android:theme="@style/theme_sunshine"
android:icon="@drawable/icon"
android:label="@string/app_name">
Vous pouvez également mettre dynamiquement dans chaque activité fonctionne également:
someChosenTheme = PreferenceManager.getDefaultSharedPreferences(this).getString("themePreference", "theme_twilight");
setTheme(someOtherChosenTheme);
Mais cela semble désordonné, et je préfère définir le thème pour l'ensemble de l'application en un seul endroit. Ma première pensée était de saisir le contexte d'application dès que mes lancements principaux d'activité et de pratique:
getApplicationContext().setTheme(R.style.theme_dummy);
mieux que je peux dire, this devrait faire l'affaire, mais en fait, il ne fait rien - la l'application entière a le style Android par défaut. Est-ce que ce qui précède est valide, et si oui, pourrais-je faire quelque chose d'autre?
Je travaille au niveau 3 de l'API si cela est important. Prods dans la bonne direction grandement appréciée!
Ceci est essentiellement ce que je fais. Ce n'est toujours pas idéal, car il n'y a pas d'héritage multiple, par ex. pour un ListActivity personnalisé, mais l'inconvénient est mineur. Didacticiel très utile, même si je l'ai déjà lu :) – Cheezmeister
J'ai effectivement une BaseListActivity et une activité de base (générique) dans chaque application que je fais. Le BaseListActivity a la gestion commune de CRUD (lire, ajouter, éditer, supprimer) intégré, il est donc très facile de créer une nouvelle activité de liste et simplement remplacer quelques méthodes. Bien sûr, si j'ajoute une MapActivity ou TabActivity, je devrais aussi créer une BaseXActivity pour eux. Parfois, l'héritage multiple est juste meilleur :) – peter3
Donc, ajouter setTheme pour chaque activité, avant que "setContentView" soit appelé est vraiment la bonne solution? n'y a-t-il pas une seule solution à l'échelle du système? aussi, que se passe-t-il avec toutes les activités qui sont déjà en vie? –