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.

Original source

Related problems