The ability to switch theme is gaining popularity in Android applications. Here's how to implement such a switch.
There are at least two options for implementing theme change:
- With recreating Activity / Fragment
- Without recreating Activity / Fragment
Changing theme with recreating Activity
The essence of the approach is that when you create an Activity, all your interface elements are rendered according to the specified application theme. But you can programmatically add a different style to an application.
All that remains is to recreate the Activity, and all the colors will automatically be repainted in the new palette. It's simple, you call setTheme() and then recreate().
An important point, if you want to set the theme directly in onCreate (), then do it before calling super
Advantages of the approach
- Minimal intervention in the application code
- Guaranteed consistency of appearance
Cons of the approach
- Rebuilding complex UI can cause noticeable lags
- If there is an element that does not restore its state, it will look like a bug
Changing theme without re-creating Activity
This approach changes the overall theme of the application and at the same time notifies the out-of-the-box interface of changes in the runtime. Every element of your screen reacts to change and redraws itself.
And graphs are drawn through onDraw(), Paint for which it changes color in the same way with a general change of styles
Advantages of the approach
- No time wasted on re-creating elements
- The UI state will be consistent (even fling in the scrollview in place)
Cons of the approach
- You need to keep track of each element and handle the theme change for it separately