Nel mondo dello sviluppo Android, creare un’interfaccia utente coerente, elegante e facilmente manutenibile è fondamentale. I temi e gli stili (Themes & Styles) sono due strumenti potenti messi a disposizione dal framework Android per ottenere proprio questo.
In questo articolo ti guiderò passo dopo passo nel comprendere cosa sono i temi e gli stili, come si usano, come personalizzarli per supportare il Light/Dark Mode, e ti mostrerò le best practice per costruire un design solido e scalabile.
Cos’è uno stile
Uno style è un insieme di attributi visivi che puoi applicare ai componenti della tua UI. In parole semplici, è un modo per riutilizzare facilmente proprietà comuni come colori, margini, padding, font, ecc.
Nel file res/values/styles.xml
:
<style name="MyTextStyle">
<item name="android:textColor">#FF0000</item>
<item name="android:textSize">18sp</item>
<item name="android:fontFamily">sans-serif-medium</item>
</style>
E lo applichi così:
<TextView
style="@style/MyTextStyle"
android:text="Benvenuto!"/>
Ereditarietà degli stili
Puoi ereditare uno stile per modificarlo senza riscriverlo da zero:
<style name="MyTitleStyle" parent="MyTextStyle">
<item name="android:textSize">24sp</item>
</style>
Cos’è un tema
Un tema è uno style globale che viene applicato a tutta l’app o a una singola activity. Mentre gli stili modificano singoli elementi, il tema cambia il comportamento visivo dell’intera app, influenzando il colore di sfondo, il colore delle toolbar, dei bottoni, delle checkbox e persino il comportamento di default dei widget.
Definizione di un tema
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="colorPrimary">@color/blue_500</item>
<item name="colorPrimaryVariant">@color/blue_700</item>
<item name="colorOnPrimary">@color/white</item>
<item name="colorSecondary">@color/teal_200</item>
<item name="android:fontFamily">@font/poppins</item>
</style>
Applicazione nel Manifest
<application
android:theme="@style/AppTheme">
...
</application>
Supportare il Light e il Dark Mode
Android supporta automaticamente la modalità scura a partire da Android 10 (API 29), ma puoi personalizzare come il tuo tema si comporta creando due file distinti:
res/values/themes.xml:
<style name="Theme.MyApp" parent="Theme.Material3.DayNight.NoActionBar">
<item name="colorPrimary">@color/light_blue</item>
<item name="android:statusBarColor">@color/white</item>
</style>
res/values-night/themes.xml
:
<style name="Theme.MyApp" parent="Theme.Material3.DayNight.NoActionBar">
<item name="colorPrimary">@color/dark_blue</item>
<item name="android:statusBarColor">@color/black</item>
</style>
Cambiare tema da codice
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) // o MODE_NIGHT_NO / MODE_NIGHT_FOLLOW_SYSTEM
Differenze tra @color
e ?attr
@color
→ fa riferimento a una risorsa statica (es:@color/black
)?attr
→ fa riferimento a un attributo definito nel tema, che può cambiare dinamicamente con il tema (es:?attr/colorPrimary
)
Esempio consigliato:
<TextView
android:textColor="?attr/colorOnBackground" />
Questo ti permette di supportare Light e Dark Mode senza scrivere codice aggiuntivo.
Best Practice
- Separa gli stili per tipologia: crea stili diversi per bottoni, titoli, testi secondari.
- Usa nomi chiari:
ButtonPrimary
,TextTitle
,CardViewStyle
aiutano a capire subito cosa fanno. - Usa
parent
per evitare duplicati: eredita stili quando possibile. - Evita il copia-incolla: lo scopo dei temi e stili è ridurre la duplicazione.
Conclusione
I temi e gli stili non sono solo un dettaglio grafico: sono fondamentali per creare app professionali, accessibili e coerenti. Investire qualche ora per imparare a padroneggiarli può risparmiarti decine di ore in fase di manutenzione e aggiornamento del design.
Se stai sviluppando un’app Android nel 2025, non puoi permetterti di ignorare i temi. Ti semplificano la vita, rendono l’esperienza utente più fluida e preparano la tua app a evolversi nel tempo.