Responsive Design è un approccio alla creazione di interfacce in cui il layout si adatta automaticamente alle dimensioni, all'orientamento e al tipo di dispositivo. Nello sviluppo mobile, il responsive design viene implementato tramite size classes in iOS e configuration qualifiers in Android. L'articolo analizza i principi del layout adattivo, gli strumenti di entrambe le piattaforme ed esempi di codice.
Punti chiave
Responsive Design è un metodo di costruzione di interfacce in cui il layout risponde alle dimensioni dello schermo, all'orientamento e allo spazio disponibile, riorganizzando gli elementi senza perdere funzionalità. Il termine è stato coniato da Ethan Marcotte nel 2010 per il web design, ma i principi si applicano pienamente alle applicazioni mobili native.
Nello sviluppo mobile, responsive design significa che la stessa applicazione viene visualizzata correttamente su tutti i dispositivi: da iPhone SE (375 pt) a iPad Pro (1024 pt in ritratto) e da uno smartphone Android (360 dp) a un tablet (800 dp). Gli elementi chiave sono griglia flessibile, immagini adattive e media query a livello di framework (size classes, qualifiers).
Secondo la Documentazione per Sviluppatori Apple, l'applicazione dovrebbe essere universale — funzionante su tutti i dispositivi senza una build separata per iPad. Google Play raccomanda di utilizzare layout adattivi tramite Jetpack WindowManager e canonical layouts. La mancanza di adattamento ai tablet è una causa comune di recensioni negative.
I termini responsive e adaptive sono spesso confusi, sebbene descrivano approcci diversi. Il responsive design utilizza una griglia flessibile che si adatta continuamente alla larghezza dello schermo. L'adaptive design utilizza layout fissi per breakpoints predefiniti — l'applicazione passa dall'uno all'altro bruscamente.
| Caratteristica | Responsive Design | Adaptive Design |
|---|---|---|
| Approccio | Flusso continuo | Passaggi discreti |
| Griglia | Percentuale, fluida | Fissa per ogni breakpoint |
| Implementazione | Auto Layout, Flexbox, ConstraintLayout | Size Classes, layout-w600dp, storyboard separati |
| Numero di layout di design | Uno, ma flessibile | Diversi (ritratto, paesaggio, tablet) |
In pratica, le applicazioni mobili utilizzano una combinazione di entrambi gli approcci. La griglia di base è costruita in modo responsive (Auto Layout con dipendenze di constraint) e al raggiungimento di un breakpoint (ad esempio, larghezza > 600 pt), il layout passa a una versione adattiva con una diversa disposizione degli elementi. iOS combina Auto Layout (responsive) con Size Classes (adaptive). Android combina ConstraintLayout (responsive) con risorse qualifier (adaptive).
Size Classes è un meccanismo iOS che classifica lo spazio disponibile sullo schermo lungo due assi: orizzontale e verticale. Ogni asse può essere Compact (C) o Regular (R). La combinazione offre quattro opzioni di adattamento del layout: CR (tipico iPhone in ritratto), RR (iPad ritratto/paesaggio), RC (iPhone paesaggio su Plus/Pro Max), CC (iPad Split View).
// Definizione di Size Classes in Swift
import UIKit
class AdaptiveViewController: UIViewController {
override func traitCollectionDidChange(
_ previousTraitCollection: UITraitCollection?
) {
super.traitCollectionDidChange(previousTraitCollection)
adjustLayout(for: traitCollection)
}
private func adjustLayout(for traits: UITraitCollection) {
switch (traits.horizontalSizeClass, traits.verticalSizeClass) {
case (.regular, .regular):
showSplitView() // iPad — mostrare master-detail
case (.compact, .regular):
showStackedView() // iPhone ritratto — layout impilato
case (.compact, .compact):
showCompactView() // iPhone SE paesaggio — minimizzato
default:
showDefaultView()
}
}
private func showSplitView() {
// Utilizzo di UISplitViewController o HStack
}
private func showStackedView() {
// Stack verticale per iPhone
}
private func showCompactView() {
// Nascondere elementi secondari, mostrare i principali
}
}In Interface Builder, le Size Classes vengono configurate tramite il pannello "wAny hAny" — lo sviluppatore seleziona una combinazione specifica (wRegular hRegular, wCompact hRegular) e aggiunge variazioni di constraint. SwiftUI utilizza @Environment(\.horizontalSizeClass) e @Environment(\.verticalSizeClass) per l'adattamento reattivo — quando l'orientamento o la dimensione della finestra cambia, SwiftUI ridisegna automaticamente la vista.
// Size Classes in SwiftUI
import SwiftUI
struct ResponsiveView: View {
@Environment(\.horizontalSizeClass) private var hSizeClass
var body: some View {
if hSizeClass == .regular {
// iPad — layout orizzontale con pannello laterale
HStack {
SidebarView()
.frame(width: 300)
ContentView()
}
} else {
// iPhone — stack verticale a schermo intero
VStack {
ContentView()
}
}
}
}Configuration Qualifiers è un meccanismo Android per caricare diverse risorse (layout, values, drawables) in base alle caratteristiche del dispositivo. I qualificatori includono dimensione dello schermo (small, normal, large, xlarge), orientamento (port, land), larghezza minima (sw<N>dp), larghezza disponibile (w<N>dp) e altezza (h<N>dp).
// Rilevamento configurazione dispositivo in Kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val config = resources.configuration
val screenWidthDp = config.screenWidthDp
val screenHeightDp = config.screenHeightDp
val orientation = config.orientation
when {
screenWidthDp >= 900 -> setContentView(R.layout.activity_main_tablet)
screenWidthDp >= 600 -> setContentView(R.layout.activity_main_sw600)
else -> setContentView(R.layout.activity_main_phone)
}
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, LandscapeFragment())
.commit()
}
}
}Struttura delle risorse per diversi schermi: res/layout/activity_main.xml (telefono), res/layout-sw600dp/activity_main.xml (tablet 7"), res/layout-sw720dp/activity_main.xml (tablet 10"). Android seleziona automaticamente il layout corretto in base a smallestWidth — la larghezza minima dello schermo in dp indipendentemente dall'orientamento. Il qualificatore sw<N>dp è il metodo di adattamento più stabile.
// Jetpack Compose — WindowSizeClass per l'adattamento
@Composable
fun ResponsiveScreen() {
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
when {
windowSizeClass.windowSizeClass == WindowWidthSizeClass.EXPANDED -> {
TabletLayout() // >= 840 dp
}
windowSizeClass.windowSizeClass == WindowWidthSizeClass.MEDIUM -> {
MediumLayout() // 600–840 dp
}
else -> {
CompactLayout() // < 600 dp
}
}
}Jetpack WindowManager (libreria androidx.window) fornisce WindowSizeClass con tre categorie di larghezza: COMPACT (0–600 dp), MEDIUM (600–840 dp), EXPANDED (>840 dp). Questa è un'alternativa moderna alle vecchie cartelle qualifier. È raccomandato da Google per l'adattamento a dispositivi pieghevoli e tablet.
La griglia adattiva è il fondamento del responsive design. Invece di dimensioni fisse, gli elementi utilizzano proporzioni percentuali, constraint flessibili e dimensione intrinseca del contenuto. Breakpoints sono punti di larghezza dello schermo in cui il layout passa da uno stato all'altro.
| Breakpoint | iOS Size Class | Android Qualifier | Tipo di dispositivo |
|---|---|---|---|
| 0–374 pt / dp | Compact width | — | iPhone SE, Android vecchio |
| 375–599 pt / dp | Compact width | sw320dp | iPhone 14, Galaxy S24 |
| 600–839 pt / dp | Regular width | sw600dp | iPad mini, tablet 7" |
| 840+ pt / dp | Regular width | sw720dp | iPad Pro, tablet 10" |
Breakpoints raccomandati da Google Material Design e Apple HIG: 0–599 dp (telefono, una colonna), 600–839 dp (tablet, due colonne, navigation rail), 840+ dp (tablet, tre colonne, navigation drawer). Il numero di breakpoints non deve superare 4 — punti di transizione eccessivi complicano la manutenzione e i test.
Un responsive design di successo richiede di seguire una serie di regole sviluppate dalla community di sviluppatori iOS e Android nell'ultimo decennio. Di seguito le raccomandazioni principali basate su Apple HIG, Google Material Design e l'esperienza di progetti in produzione.
Il principio principale del design adattivo: il contenuto definisce il layout, non il contrario. Se un iPad mostra la stessa pila di carte di un iPhone, solo allungata — non è responsive design. Il responsive design ripensa la disposizione: su iPhone — scorrimento verticale, su iPad — master-detail con pannello laterale.
Domande frequenti
Responsive Design utilizza una griglia flessibile che si adatta gradualmente alla larghezza dello schermo. Adaptive Layout passa tra layout fissi in punti di breakpoint. In pratica, entrambi gli approcci sono combinati: griglia di base responsive + passaggi adattivi per cambiamenti importanti (telefono vs tablet).
iOS utilizza due assi: orizzontale (Compact/Regular) e verticale (Compact/Regular). iPhone in ritratto — Compact width, Regular height (CR). iPad — Regular width, Regular height (RR). iPhone Plus/Pro Max in paesaggio — Regular width, Compact height (RC). Lo sviluppatore imposta variazioni di constraint per ogni combinazione.
sw600dp (smallestWidth 600 dp) è un qualificatore di risorse Android che significa che la larghezza minima dello schermo del dispositivo è di almeno 600 dp. Viene utilizzato per caricare layout alternativi per tablet (7" e più grandi). L'orientamento non influisce — sw considera il lato più piccolo dello schermo.
Su iOS, usa il simulatore con diverse Size Classes e l'anteprima SwiftUI con dispositivi di varie dimensioni. Su Android — profili dispositivo nell'emulatore (Pixel 5, Pixel C, Galaxy Tab) e Layout Validation in Android Studio. Su entrambe le piattaforme, testa su un iPad/tablet Android fisico e su un dispositivo pieghevole.
Canonical layouts sono schemi di layout adattivo pronti di Google Material Design 3: list-detail, feed (feed di carte), supporting pane (contenuto principale + pannello azioni). Ogni schema ha tre varianti (compact/medium/expanded) e si adatta automaticamente a WindowSizeClass.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche