Responsive Design — dasar-dasar, adaptasi antarmuka ke layar

Penulis: IT Sectr Diterbitkan: 2026-02-25 Waktu membaca: 9 mnt

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 — adaptasi antarmuka ke berbagai ukuran layar, orientasi, dan jenis perangkat
  • Size Classes — mekanisme iOS untuk menentukan ukuran ringkas atau reguler secara horizontal dan vertikal
  • Configuration Qualifiers — sumber daya Android (layout-w600dp, values-sw600dp) untuk berbagai konfigurasi layar
  • Grid adaptif — penataan ulang elemen saat lebar layar berubah, bukan sekadar meregangkan
  • Breakpoints — titik transisi antara status tata letak (misalnya 375 pt untuk iPhone, 768 pt untuk iPad)

Apa itu Responsive Design?

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.

Responsive vs Adaptive Design

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.

KarakteristikResponsive DesignAdaptive Design
PendekatanAliran terus-menerusPeralihan diskrit
GridPersentase, fluidTetap untuk setiap breakpoint
ImplementasiAuto Layout, Flexbox, ConstraintLayoutSize Classes, layout-w600dp, storyboard terpisah
Jumlah desain tata letakSatu, tetapi fleksibelBeberapa (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).

iOS Size Classes: Compact dan Regular

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).

swift
// 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.

swift
// 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()
            }
        }
    }
}

Android Configuration Qualifiers

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 (swdp), lebar tersedia (wdp), dan tinggi (hdp).

kotlin
// 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 swdp — metode adaptasi paling stabil.

kotlin
// 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 dan breakpoints

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.

BreakpointiOS Size ClassAndroid QualifierJenis Perangkat
0–374 pt / dpCompact widthiPhone SE, Android lama
375–599 pt / dpCompact widthsw320dpiPhone 14, Galaxy S24
600–839 pt / dpRegular widthsw600dpiPad mini, tablet 7"
840+ pt / dpRegular widthsw720dpiPad 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.

Praktik terbaik desain adaptif

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.

  • Mulai dari layar terkecil — desain tata letak untuk iPhone SE (375 pt) atau Android compact (360 dp), lalu tambahkan ekstensi untuk layar yang lebih besar. Ini memastikan konten kritis muat di mana saja
  • Gunakan intrinsic content size — UILabel, UIButton, ImageView memiliki ukuran alami. Auto Layout dan ConstraintLayout menggunakannya untuk penempatan otomatis tanpa batasan yang tidak perlu
  • Jangan sembunyikan konten di layar kecil — alih-alih menyembunyikan, tata ulang (reflow). Pengguna harus memiliki akses ke fungsionalitas yang sama, hanya dalam urutan yang berbeda
  • Uji pada semua size classes — simulator iOS memungkinkan perubahan Size Classes tanpa restart. Emulator Android menyediakan profil perangkat yang berbeda. Wajib uji pada tablet dan perangkat lipat
  • Material 3 Adaptive Layout — Google menyediakan canonical layouts siap pakai untuk daftar/detail, panel alat, dan navigasi. Gunakan ini daripada menemukan pola sendiri

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

Apa perbedaan Responsive Design dengan Adaptive Layout?

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).

Size Classes apa saja yang ada di iOS?

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.

Apa itu sw600dp di Android?

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.

Bagaimana cara menguji adaptabilitas aplikasi?

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.

Apa itu canonical layouts di Material Design?

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

  • Responsive Design — adaptasi tata letak ke ukuran dan orientasi layar melalui grid fleksibel dan breakpoints
  • Size Classes di iOS (Compact/Regular) menentukan tata letak untuk iPhone, iPad, dan Split View
  • Configuration Qualifiers di Android (swdp, wdp, layout-land) memuat sumber daya untuk perangkat
  • Jetpack WindowManager menyediakan WindowSizeClass dengan tiga kategori: COMPACT, MEDIUM, EXPANDED
  • Breakpoints: 0–599 dp (ponsel), 600–839 dp (tablet), 840+ dp (tablet lebar)
  • Responsive ≠ peregangan sederhana — penataan ulang elemen (reflow) diperlukan, bukan menyembunyikan konten
  • Pengujian pada semua jenis perangkat, termasuk tablet dan perangkat lipat, adalah tahap pengembangan wajib

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.

Diskusikan proyek

Baca juga