How to change current Theme at runtime in Android
android, themes
Solution
I would like to see the method too, where you set once for all your activities. But as far I know you have to set in each activity before showing any views.
For reference check this:
http://www.anddev.org/applying_a_theme_to_your_application-t817.html
Edit (copied from that forum):
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Call setTheme before creation of any(!) View.
setTheme(android.R.style.Theme_Dark);
// ...
setContentView(R.layout.main);
}
Edit If you call `setTheme` after `super.onCreate(savedInstanceState);` your activity recreated but if you call `setTheme` before `super.onCreate(savedInstanceState);` your theme will set and activity does not recreate anymore
protected void onCreate(Bundle savedInstanceState) {
setTheme(android.R.style.Theme_Dark);
super.onCreate(savedInstanceState);
// ...
setContentView(R.layout.main);
}
Problem
I've created a PreferenceActivity that allows the user to choose the theme he wants to apply to the entire application. When the user selects a theme, this code is executed: ``` if (...) { getApplication().setTheme(R.style.BlackTheme); } else { getApplication().setTheme(R.style.LightTheme); } ``` But, even though I've checked with the debugger that the code is being executed, I can't see any change in the user interface. Themes are defined in `res/values/styles.xml`, and Eclipse does not show any error. ``` <resources> <style name="LightTheme" parent="@android:style/Theme.Light"> </style> <style name="BlackTheme" parent="@android:style/Theme.Black"> </style> </resources> ``` Any idea about what could be happening and how to fix it? Should I call `setTheme` at any special point in the code? My application consists of several Activities if that helps.