Responsive Design – egy megközelítés a felületek építéséhez, ahol az elrendezés automatikusan alkalmazkodik az eszköz méretéhez, tájolásához és típusához. A mobil fejlesztésben a responsive design iOS-ben size classes, Android-ban configuration qualifiers segítségével valósul meg. A cikk az adaptív elrendezés elveit, mindkét platform eszközeit és kódpéldákat tárgyal.
Főbb pontok
Responsive Design – egy módszer a felületek építéséhez, ahol az elrendezés reagál a képernyő méretére, tájolására és rendelkezésre álló helyre, átrendezve az elemeket a funkcionalitás elvesztése nélkül. A kifejezést Ethan Marcotte javasolta 2010-ben webfejlesztéshez, de az elvek teljes mértékben alkalmazhatók natív mobil alkalmazásokra.
A mobil fejlesztésben a responsive design azt jelenti, hogy ugyanaz az alkalmazás minden eszközön helyesen jelenik meg: iPhone SE-től (375 pt) iPad Pro-ig (1024 pt portréban) és Android okostelefontól (360 dp) tabletig (800 dp). A legfontosabb elemek: rugalmas rács (flexible grid), adaptív képek és media queries keretrendszer szinten (size classes, qualifiers).
Az Apple Developer Documentation szerint az alkalmazásnak univerzálisnak kell lennie – minden eszközön működnie kell külön iPad fordítás nélkül. A Google Play az adaptive layouts használatát javasolja Jetpack WindowManager és canonical layouts segítségével. A tabletekhez való alkalmazkodás hiánya gyakori oka a negatív értékeléseknek.
A responsive és adaptive kifejezéseket gyakran összekeverik, bár különböző megközelítéseket írnak le. A Responsive design rugalmas rácshálózatot használ, amely folyamatosan alkalmazkodik a képernyő szélességéhez. Az Adaptive design rögzített elrendezéseket használ előre meghatározott breakpoints-okhoz – az alkalmazás ugrásszerűen vált közöttük.
| Jellemző | Responsive Design | Adaptive Design |
|---|---|---|
| Megközelítés | Folyamatos áramlás | Diszkrét váltások |
| Rács | Százalékos, fluid | Rögzített minden breakpoint-hoz |
| Megvalósítás | Auto Layout, Flexbox, ConstraintLayout | Size Classes, layout-w600dp, külön storyboard-ok |
| Layout tervek száma | Egy, de rugalmas | Több (phone portrait, phone landscape, tablet) |
A gyakorlatban a mobil alkalmazások mindkét megközelítés kombinációját használják. Az alap rács responsive módon épül (Auto Layout constraint függőségekkel), és a breakpoint elérésekor (pl. szélesség > 600 pt) az elrendezés átvált egy adaptív verzióra más elemkompozícióval. Az iOS az Auto Layout-ot (responsive) kombinálja a Size Classes-szal (adaptive). Az Android a ConstraintLayout-ot (responsive) kombinálja a qualifier erőforrásokkal (adaptive).
Size Classes – iOS mechanizmus, amely a rendelkezésre álló képernyőterületet két tengely mentén osztályozza: vízszintes és függőleges. Minden tengely lehet Compact (C) vagy Regular (R). A kombináció négy változatot ad az elrendezés adaptálásához: CR (általános iPhone portré), RR (iPad portré/fekvő), RC (iPhone fekvő Plus/Pro Max-en), CC (iPad Split View).
// Size Classes meghatározása Swiftben
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 — master-detail mutatása
case (.compact, .regular):
showStackedView() // iPhone portré — stack elrendezés
case (.compact, .compact):
showCompactView() // iPhone SE fekvő — minimalizált
default:
showDefaultView()
}
}
private func showSplitView() {
// UISplitViewController vagy HStack használata
}
private func showStackedView() {
// Függőleges stack iPhone-hoz
}
private func showCompactView() {
// Másodlagos elemek elrejtése, fő elemek mutatása
}
}Az Interface Builder-ben a Size Classes a „wAny hAny” panelen keresztül konfigurálható – a fejlesztő kiválaszt egy adott kombinációt (wRegular hRegular, wCompact hRegular) és constraint variációkat ad hozzá. A SwiftUI a @Environment(\.horizontalSizeClass) és @Environment(\.verticalSizeClass) segítségével reagál az alkalmazkodáshoz – tájolás vagy ablakméret változásakor a SwiftUI automatikusan újrarajzolja a nézetet.
// Size Classes a SwiftUI-ban
import SwiftUI
struct ResponsiveView: View {
@Environment(\.horizontalSizeClass) private var hSizeClass
var body: some View {
if hSizeClass == .regular {
// iPad — vízszintes elrendezés oldalsó panellel
HStack {
SidebarView()
.frame(width: 300)
ContentView()
}
} else {
// iPhone — teljes képernyős függőleges stack
VStack {
ContentView()
}
}
}
}Configuration Qualifiers – Android mechanizmus különböző erőforrások (layout, values, drawables) betöltéséhez az eszköz jellemzőitől függően. A minősítők közé tartozik a képernyő mérete (small, normal, large, xlarge), tájolás (port, land), minimális szélesség (sw
// Eszközkonfiguráció meghatározása Kotlinban
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()
}
}
}Erőforrás struktúra különböző képernyőkhöz: res/layout/activity_main.xml (telefon), res/layout-sw600dp/activity_main.xml (tablet 7"), res/layout-sw720dp/activity_main.xml (tablet 10"). Az Android automatikusan kiválasztja a megfelelő layout-ot a smallestWidth alapján – a képernyő minimális szélessége dp-ben, tájolástól függetlenül. A sw
// Jetpack Compose — WindowSizeClass az adaptációhoz
@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
}
}
}A Jetpack WindowManager (androidx.window könyvtár) WindowSizeClass-ot biztosít három szélességkategóriával: COMPACT (0–600 dp), MEDIUM (600–840 dp), EXPANDED (>840 dp). Ez egy modern alternatíva a régi qualifier mappákhoz. A Google ajánlja összehajtható eszközökhöz és tabletekhez való alkalmazkodáshoz.
Az adaptív rács a responsive design alapja. Rögzített méretek helyett az elemek százalékos arányokat, rugalmas korlátokat és intrinsic content size-t használnak. Breakpoints – képernyőszélességi pontok, amelyek elérésekor az elrendezés állapotok között vált.
| Breakpoint | iOS Size Class | Android Qualifier | Eszköz típus |
|---|---|---|---|
| 0–374 pt / dp | Compact width | — | iPhone SE, régi Android |
| 375–599 pt / dp | Compact width | sw320dp | iPhone 14, Galaxy S24 |
| 600–839 pt / dp | Regular width | sw600dp | iPad mini, 7" tabletek |
| 840+ pt / dp | Regular width | sw720dp | iPad Pro, 10" tabletek |
A Google Material Design és Apple HIG által ajánlott breakpoints: 0–599 dp (telefon, egy oszlop), 600–839 dp (tablet, két oszlop, navigation rail), 840+ dp (tablet, három oszlop, navigation drawer). A breakpoints száma nem haladhatja meg a 4-et – túl sok átmeneti pont bonyolítja a karbantartást és tesztelést.
A sikeres responsive design megköveteli az iOS és Android fejlesztők közössége által az elmúlt évtizedben kidolgozott szabályok betartását. Az alábbiakban a legfontosabb ajánlások találhatók az Apple HIG, Google Material Design és éles projektek tapasztalatai alapján.
Az adaptív design fő elve: a tartalom határozza meg az elrendezést, nem fordítva. Ha az iPad ugyanazt a kártyaköteget jeleníti meg, mint az iPhone, csak szélességben kinyújtva – az nem responsive design. A Responsive design újragondolja a kompozíciót: iPhone-on – függőleges görgetés, iPad-en – master-detail oldalsó panellel.
Gyakran Ismételt Kérdések
Responsive Design rugalmas rácshálózatot használ, amely fokozatosan alkalmazkodik a képernyő szélességéhez. Adaptive Layout rögzített elrendezések között vált a breakpoint pontokban. A gyakorlatban mindkét megközelítést kombinálják: responsive alap rács + adaptív váltások radikális változásokhoz (telefon vs tablet).
Az iOS két tengelyt használ: vízszintes (Compact/Regular) és függőleges (Compact/Regular). iPhone portréban – Compact width, Regular height (CR). iPad – Regular width, Regular height (RR). iPhone Plus/Pro Max fekvőben – Regular width, Compact height (RC). A fejlesztő minden kombinációhoz constraint variációkat állít be.
sw600dp (smallestWidth 600 dp) – egy Android erőforrás minősítő, ami azt jelenti, hogy az eszköz képernyőjének minimális szélessége legalább 600 dp. Alternatív layout-ok betöltésére szolgál tabletekhez (7" és nagyobb). A tájolás nem számít – a sw a képernyő legkisebb oldalát veszi figyelembe.
iOS-en használjon szimulátort különböző Size Classes-szal és Preview-t SwiftUI-ban különböző méretű eszközökkel. Android-on – eszközprofilokat az emulátorban (Pixel 5, Pixel C, Galaxy Tab) és Layout Validation-t Android Studio-ban. Mindkét platformon kötelezően teszteljen fizikai iPad/Android tableten és összehajtható eszközön.
Canonical layouts – kész adaptív kompozíciós minták a Google Material Design 3-tól: list-detail (lista + részletek), feed (kártyafolyam), supporting pane (fő tartalom + műveleti panel). Minden mintának három változata van (compact/medium/expanded) és automatikusan alkalmazkodik a WindowSizeClass-hoz.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is