Responsive Design — pendekatan pembangunan antarmuka di mana tata letak secara otomatis menyesuaikan dengan ukuran, orientasi, dan jenis perangkat. Dalam pengembangan mobile, responsive design diimplementasikan melalui size classes di iOS dan configuration qualifiers di Android. Artikel ini membahas prinsip-prinsip tata letak adaptif, alat kedua platform, dan contoh kode.
Utama
Responsive Design — metode pembangunan antarmuka di mana tata letak bereaksi terhadap ukuran layar, orientasi, dan ruang yang tersedia, menata ulang posisi elemen tanpa kehilangan fungsionalitas. Istilah ini diusulkan oleh Ethan Marcotte pada tahun 2010 untuk desain web, tetapi prinsip-prinsipnya sepenuhnya berlaku untuk aplikasi mobile native.
Dalam pengembangan mobile, responsive design berarti aplikasi yang sama ditampilkan dengan benar di semua perangkat: dari iPhone SE (375 pt) hingga iPad Pro (1024 pt dalam potret) dan dari smartphone Android (360 dp) hingga tablet (800 dp). Elemen kuncinya adalah grid fleksibel (flexible grid), gambar adaptif, dan media queries di tingkat framework (size classes, qualifiers).
Menurut Apple Developer Documentation, aplikasi harus bersifat universal — berfungsi di semua perangkat tanpa kompilasi terpisah untuk iPad. Google Play merekomendasikan penggunaan adaptive layouts melalui Jetpack WindowManager dan canonical layouts. Kurangnya adaptasi ke tablet adalah penyebab umum ulasan negatif.
Istilah responsive dan adaptive sering tertukar, meskipun keduanya menggambarkan pendekatan yang berbeda. Responsive design menggunakan grid fleksibel yang terus menyesuaikan dengan lebar layar. Adaptive design menggunakan tata letak tetap untuk breakpoints yang telah ditentukan — aplikasi beralih di antaranya secara tiba-tiba.
| Karakteristik | Responsive Design | Adaptive Design |
|---|---|---|
| Pendekatan | Aliran terus-menerus | Peralihan diskrit |
| Grid | Persentase, fluid | Tetap untuk setiap breakpoint |
| Implementasi | Auto Layout, Flexbox, ConstraintLayout | Size Classes, layout-w600dp, storyboard terpisah |
| Jumlah desain tata letak | Satu, tetapi fleksibel | Beberapa (phone portrait, phone landscape, tablet) |
Dalam praktiknya, aplikasi mobile menggunakan kombinasi kedua pendekatan. Grid dasar dibangun secara responsive (Auto Layout dengan dependensi constraint), dan saat mencapai breakpoint (misalnya lebar > 600 pt) tata letak beralih ke versi adaptif dengan komposisi elemen yang berbeda. iOS menggabungkan Auto Layout (responsive) dengan Size Classes (adaptive). Android menggabungkan ConstraintLayout (responsive) dengan sumber daya qualifier (adaptive).
Size Classes — mekanisme iOS yang mengklasifikasikan ruang layar yang tersedia pada dua sumbu: horizontal dan vertikal. Setiap sumbu bisa Compact (C) atau Regular (R). Kombinasinya memberikan empat varian untuk adaptasi tata letak: CR (iPhone potret biasa), RR (iPad potret/lanskap), RC (iPhone lanskap di Plus/Pro Max), CC (iPad Split View).
// Mendefinisikan Size Classes di 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 — tampilkan master-detail
case (.compact, .regular):
showStackedView() // iPhone potret — tata letak tumpukan
case (.compact, .compact):
showCompactView() // iPhone SE lanskap — diminimalkan
default:
showDefaultView()
}
}
private func showSplitView() {
// Kami menggunakan UISplitViewController atau HStack
}
private func showStackedView() {
// Tumpukan vertikal untuk iPhone
}
private func showCompactView() {
// Sembunyikan elemen sekunder, tampilkan yang utama
}
}Di Interface Builder, Size Classes dikonfigurasi melalui panel “wAny hAny” — pengembang memilih kombinasi tertentu (wRegular hRegular, wCompact hRegular) dan menambahkan variasi constraint. SwiftUI menggunakan @Environment(\.horizontalSizeClass) dan @Environment(\.verticalSizeClass) untuk adaptasi reaktif — saat orientasi atau ukuran jendela berubah, SwiftUI secara otomatis menggambar ulang view.
// Size Classes di SwiftUI
import SwiftUI
struct ResponsiveView: View {
@Environment(\.horizontalSizeClass) private var hSizeClass
var body: some View {
if hSizeClass == .regular {
// iPad — tata letak horizontal dengan panel samping
HStack {
SidebarView()
.frame(width: 300)
ContentView()
}
} else {
// iPhone — tumpukan vertikal layar penuh
VStack {
ContentView()
}
}
}
}Configuration Qualifiers — mekanisme Android untuk memuat berbagai sumber daya (layout, values, drawables) tergantung pada karakteristik perangkat. Kualifikasi mencakup ukuran layar (small, normal, large, xlarge), orientasi (port, land), lebar minimum (sw
// Mendefinisikan konfigurasi perangkat di 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()
}
}
}Struktur sumber daya untuk layar berbeda: res/layout/activity_main.xml (ponsel), res/layout-sw600dp/activity_main.xml (tablet 7"), res/layout-sw720dp/activity_main.xml (tablet 10"). Android secara otomatis memilih tata letak yang benar berdasarkan smallestWidth — lebar minimum layar dalam dp terlepas dari orientasi. Kualifikasi sw
// Jetpack Compose — WindowSizeClass untuk adaptasi
@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 (pustaka androidx.window) menyediakan WindowSizeClass dengan tiga kategori lebar: COMPACT (0–600 dp), MEDIUM (600–840 dp), EXPANDED (>840 dp). Ini adalah alternatif modern untuk folder kualifikasi lama. Direkomendasikan oleh Google untuk adaptasi ke perangkat lipat dan tablet.
Grid adaptif adalah dasar dari responsive design. Alih-alih ukuran tetap, elemen menggunakan rasio persentase, batasan fleksibel, dan intrinsic content size. Breakpoints — titik lebar layar di mana tata letak beralih antar status.
| Breakpoint | iOS Size Class | Android Qualifier | Jenis Perangkat |
|---|---|---|---|
| 0–374 pt / dp | Compact width | — | iPhone SE, Android lama |
| 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 yang direkomendasikan oleh Google Material Design dan Apple HIG: 0–599 dp (ponsel, satu kolom), 600–839 dp (tablet, dua kolom, navigation rail), 840+ dp (tablet, tiga kolom, navigation drawer). Jumlah breakpoints tidak boleh melebihi 4 — terlalu banyak titik transisi mempersulit pemeliharaan dan pengujian.
Responsive design yang sukses memerlukan kepatuhan terhadap seperangkat aturan yang dikembangkan oleh komunitas pengembang iOS dan Android selama dekade terakhir. Di bawah ini adalah rekomendasi utama berdasarkan Apple HIG, Google Material Design, dan pengalaman proyek produksi.
Prinsip utama desain adaptif: konten menentukan tata letak, bukan sebaliknya. Jika di iPad menampilkan tumpukan kartu yang sama seperti di iPhone, hanya diregangkan lebarnya — itu bukan responsive design. Responsive design memikirkan ulang komposisi: di iPhone — scroll vertikal, di iPad — master-detail dengan panel samping.
Pertanyaan yang Sering Diajukan
Responsive Design menggunakan grid fleksibel yang secara bertahap menyesuaikan dengan lebar layar. Adaptive Layout beralih antara tata letak tetap di titik breakpoint. Dalam praktiknya, kedua pendekatan digabungkan: grid dasar responsive + peralihan adaptif untuk perubahan mendasar (ponsel vs tablet).
iOS menggunakan dua sumbu: horizontal (Compact/Regular) dan vertikal (Compact/Regular). iPhone dalam potret — Compact width, Regular height (CR). iPad — Regular width, Regular height (RR). iPhone Plus/Pro Max dalam lanskap — Regular width, Compact height (RC). Pengembang menetapkan variasi constraint untuk setiap kombinasi.
sw600dp (smallestWidth 600 dp) — kualifikasi sumber daya Android yang berarti lebar minimum layar perangkat setidaknya 600 dp. Digunakan untuk memuat tata letak alternatif untuk tablet (7" dan lebih besar). Orientasi tidak berpengaruh — sw mempertimbangkan sisi terkecil layar.
Di iOS, gunakan simulator dengan Size Classes berbeda dan Preview di SwiftUI dengan perangkat berbagai ukuran. Di Android — profil perangkat di emulator (Pixel 5, Pixel C, Galaxy Tab) dan Layout Validation di Android Studio. Di kedua platform, wajib uji pada iPad/Android tablet fisik dan perangkat lipat.
Canonical layouts — pola komposisi adaptif siap pakai dari Google Material Design 3: list-detail (daftar + detail), feed (umpan kartu), supporting pane (konten utama + panel tindakan). Setiap pola memiliki tiga varian (compact/medium/expanded) dan secara otomatis menyesuaikan dengan WindowSizeClass.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga