Guido García Guido García - 20 days ago 5
Android Question

How to change current Theme at runtime in Android

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.

Answer

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);
}
Comments