Android – Stili e temi

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.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Share via
Copy link
Verificato da MonsterInsights