Customising Android App UI with Themes
Article Summary
Maxim Kostenko from Revolut reveals how they built one of the most customizable Android apps on the market. Their approach goes far beyond basic dark mode—and it required reverse-engineering Android's own framework.
Most Android apps stop at light/dark themes, but Revolut offers users complete control: system-wide dynamic colors, custom color palettes, and real-time theme switching. This deep dive explains the technical implementation behind each personalization layer, including the challenges of runtime theme changes without official Android APIs.
Key Takeaways
- Dynamic colors work via theme overlays, not full Material3 migration
- Runtime theme switching requires recreating all activities manually
- Custom ColorThemesController mimics private AppCompatDelegate behavior
- Theme overlays apply like HashMap keys, replacing specific color tokens
- Cross-platform custom themes solve iOS/Android personalization parity
Revolut achieved maximum Android UI personalization by combining dynamic colors, custom theme overlays, and a custom controller that forces activity recreation—techniques that work without migrating to Material3.