Pourquoi getApplicationContext (). SetTheme () dans une activité ne fonctionne pas?
Question
J'ai actuellement du mal à appeler getApplicationContext (). setTheme ()
dans une activité, je souhaite simplement appliquer une ressource de thème dans une portée d'application plutôt que dans le style de code. , mais le problème est que cela ne fonctionne pas du tout, est-ce que quelqu'un peut expliquer cela?
Merci beaucoup.!
Il est le squelette de code:
public class StartUp extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
/*
* setTheme(android.R.style.Theme_Black_NoTitleBar_Fullscreen);
* //that works!
*/
this.getApplicationContext().setTheme(
android.R.style.Theme_Black_NoTitleBar_Fullscreen);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
La solution
J'ai eu le même problème avant et je n'ai pas trouvé le moyen de résoudre ce problème. Dieu seul sait pourquoi, mais j’ai même vu des ingénieurs de framework Android (je crois que c’était Dianne Hackborn) affirmer qu’il était déconseillé de définir des thèmes comme celui-ci.
Définissez le thème de votre activité dans le manifeste à la place, et cela fonctionnera.
Autres conseils
vous pouvez utiliser setTheme (..)
avant d'appeler setContentView (...)
et super.oncreate ()
et cela devrait fonctionner bien
Quand appelez-vous setTheme () dans le contexte de votre application? Il doit être appelé avant d'instancier une vue.
vous pouvez utiliser
setTheme (..)
avant d'appelersetContentView (...)
etsuper.oncreate ()
et cela devrait fonctionner correctement
Cela a été corrigé dans SDK 4.0 (peut-être plus tôt).
Je n’ai pas essayé cela moi-même, mais s’il était absolument nécessaire de définir le thème par programmation, la tâche suivante consisterait à dériver une classe de Application et à remplacer la méthode onCreate comme suit:
public class MyApplication extends android.app.Application {
@Override
public void onCreate() {
super.onCreate();
setTheme(android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}
}