Responsive Design — interfeyslərin qurulmasına yanaşma, burada layout avtomatik olaraq cihazın ölçüsünə, oriyentasiyasına və növünə uyğunlaşır. Mobil inkişafda responsive design iOS-da size classes və Android-də configuration qualifiers vasitəsilə həyata keçirilir. Məqalə adaptiv layout prinsiplərini, hər iki platformanın alətlərini və kod nümunələrini izah edir.
Başlıca
Responsive Design — interfeyslərin qurulması metodu, burada layout ekran ölçüsünə, oriyentasiyaya və mövcud boşluğa reaksiya verərək elementlərin yerini funksionallığı itirmədən yenidən təşkil edir. Termin 2010-cu ildə Ethan Marcotte tərəfindən veb dizayn üçün təklif edilmişdir, lakin prinsiplər yerli mobil tətbiqlərə tamamilə tətbiq olunur.
Mobil inkişafda responsive design o deməkdir ki, eyni tətbiq bütün cihazlarda düzgün göstərilir: iPhone SE-dən (375 pt) iPad Pro-ya qədər (1024 pt portretdə) və Android smartfonundan (360 dp) planşetə qədər (800 dp). əsas elementlər: çevik şəbəkə (flexible grid), adaptiv şəkillər və media sorğuları framework səviyyəsində (size classes, qualifiers).
Apple Developer Documentation-a görə, tətbiq universal olmalıdır — iPad üçün ayrıca qurma olmadan bütün cihazlarda işləməlidir. Google Play Jetpack WindowManager və canonical layouts vasitəsilə adaptive layouts-un istifadəsini tövsiyə edir. Planşetlərə uyğarlaşmanın olmaması mənfi rəylərin tez-tez səbəbidir.
Responsive və adaptive terminləri tez-tez qarışdırılır, baxmayaraq ki, onlar fərqli yanaşmaları təsvir edir. Responsive design ekranın eninə fasiləsiz uyğarlaşan çevik şəbəkədən istifadə edir. Adaptive design əvvəlcədən müəyyən edilmiş breakpoints üçün sabit layoutlardan istifadə edir — tətbiq onlar arasında sıçrayaraq keçid edir.
| Xarakteristika | Responsive Design | Adaptive Design |
|---|---|---|
| Yanaşma | Hamır axın | Diskret keçidlər |
| Şəbəkə | Faizli, fluid | Hər breakpoint üçün sabit |
| Tətbiq | Auto Layout, Flexbox, ConstraintLayout | Size Classes, layout-w600dp, ayrı storyboardlar |
| Dizayn layout sayı | Bir, lakin çevik | Bir neçə (phone portrait, phone landscape, tablet) |
Praktikada mobil tətbiqlər hər iki yanaşmanın kombinasiyasından istifadə edir. Əsas şəbəkə responsive qurulur (Auto Layout constraint asılılıqları ilə), və breakpoint-ə çatdıqda (məs. en > 600 pt) layout elementlərin fərqli kompozisiyası ilə adaptiv versiyaya keçir. iOS Auto Layout (responsive) ilə Size Classes (adaptive) birləşdirir. Android ConstraintLayout (responsive) ilə qualifier resurslarını (adaptive) birləşdirir.
Size Classes — iOS mexanizmi, ekranın mövcud sahəsini iki ox üzrə təsnif edir: üfqi və şaquli. Hər bir ox Compact (C) və ya Regular (R) ola bilər. Kombinasiya layout uyğarlaşdırma üçün dörd variant verir: CR (adi iPhone portret), RR (iPad portret/landşaft), RC (iPhone landşaft Plus/Pro Max), CC (iPad Split View).
// Swift-də Size Classes-in təyini
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 göstər
case (.compact, .regular):
showStackedView() // iPhone portret — yığın layout
case (.compact, .compact):
showCompactView() // iPhone SE landşaft — minimallaşdırılmış
default:
showDefaultView()
}
}
private func showSplitView() {
// UISplitViewController və ya HStack istifadə edirik
}
private func showStackedView() {
// iPhone üçün şaquli yığın
}
private func showCompactView() {
// İkinci dərəcəli elementləri gizlət, əsasları göstər
}
}Interface Builder-də Size Classes „wAny hAny” paneli vasitəsilə konfiqurasiya edilir — proqramçı müəyyən kombinasiyanı seçir (wRegular hRegular, wCompact hRegular) və constraint varyasiyaları əlavə edir. SwiftUI reaktiv uyğarlaşma üçün @Environment(\.horizontalSizeClass) və @Environment(\.verticalSizeClass) istifadə edir — oriyentasiya və ya pəncərə ölçüsü dəyişdikdə SwiftUI avtomatik olaraq görünüşü yenidən çəkir.
// SwiftUI-də Size Classes
import SwiftUI
struct ResponsiveView: View {
@Environment(\.horizontalSizeClass) private var hSizeClass
var body: some View {
if hSizeClass == .regular {
// iPad — yan panel ilə üfüqi layout
HStack {
SidebarView()
.frame(width: 300)
ContentView()
}
} else {
// iPhone — tam ekran şaquli yığın
VStack {
ContentView()
}
}
}
}Configuration Qualifiers — Android mexanizmi, cihazın xarakteristikasından asılı olaraq müxtəlif resursları (layout, values, drawables) yükləmək üçün. Kvalifikatorlara ekran ölçüsü (small, normal, large, xlarge), oriyentasiya (port, land), minimal en (sw
// Kotlin-də cihaz konfiqurasiyasının təyini
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()
}
}
}Müxtəlif ekranlar üçün resurs strukturu: res/layout/activity_main.xml (telefon), res/layout-sw600dp/activity_main.xml (planşet 7"), res/layout-sw720dp/activity_main.xml (planşet 10"). Android smallestWidth əsasında düzgün layout-u avtomatik seçir — oriyentasiyadan asılı olmayaraq ekranın dp-də minimal eni. sw
// Jetpack Compose — uyğunlaşma üçün WindowSizeClass
@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 (androidx.window kitabxanası) üç en kateqoriyası ilə WindowSizeClass təmin edir: COMPACT (0–600 dp), MEDIUM (600–840 dp), EXPANDED (>840 dp). Bu köhnə qualifier qovluqlarına müasir alternativdir. Qatlanan cihazlar və planşetlər üçün Google tərəfindən tövsiyə olunur.
Adaptiv şəbəkə responsive design-in əsasıdır. Sabit ölçülər əvəzinə elementlər faiz nisbətləri, çevik məhdudiyyətlər və intrinsic content size istifadə edir. Breakpoints — ekran eninin nöqtələri, çatdıqda layout vəziyyətlər arasında keçid edir.
| Breakpoint | iOS Size Class | Android Qualifier | Cihaz növü |
|---|---|---|---|
| 0–374 pt / dp | Compact width | — | iPhone SE, köhnə Android |
| 375–599 pt / dp | Compact width | sw320dp | iPhone 14, Galaxy S24 |
| 600–839 pt / dp | Regular width | sw600dp | iPad mini, 7" planşetlər |
| 840+ pt / dp | Regular width | sw720dp | iPad Pro, 10" planşetlər |
Google Material Design və Apple HIG tərəfindən tövsiyə olunan breakpoints: 0–599 dp (telefon, bir sütun), 600–839 dp (planşet, iki sütun, navigation rail), 840+ dp (planşet, üç sütun, navigation drawer). Breakpoints sayı 4-dən çox olmamalıdır — həddindən çox keçid nöqtəsi dəstək və testi çətinləşdirir.
Uğurlu responsive design son onillikdə iOS və Android proqramçıları icması tərəfindən işlənmiş qaydalar toplusuna riayət etməyi tələb edir. Aşağıda Apple HIG, Google Material Design və istehsal layihələri təcrübəsinə əsaslanan əsas tövsiyələr verilmişdir.
Adaptiv dizaynın əsas prinsipi: məzmun layout-u müyyənləşdirir, əksinə yox. Əgər iPad-də iPhone-dakı kimi eyni kart yığını, sadəcə eninə uzanmış şəkildə göstərilirsə — bu responsive design deyil. Responsive design kompozisiyanı yenidən düşünür: iPhone-da — şaquli scroll, iPad-də — yan panel ilə master-detail.
Tez-tez verilən suallar
Responsive Design ekran eninə hamır uyğarlaşan çevik şəbəkədən istifadə edir. Adaptive Layout breakpoint nöqtələrində sabit layoutlar arasında keçid edir. Praktikada hər iki yanaşma birləşdirilir: responsive əsas şəbəkə + kardinal dəyişikliklər üçün adaptiv keçidlər (telefon vs planşet).
iOS iki oxdan istifadə edir: üfqi (Compact/Regular) və şaquli (Compact/Regular). iPhone portretdə — Compact width, Regular height (CR). iPad — Regular width, Regular height (RR). iPhone Plus/Pro Max landşaftda — Regular width, Compact height (RC). Proqramçı hər kombinasiya üçün constraint varyasiyaları təyin edir.
sw600dp (smallestWidth 600 dp) — Android resurs kvalifikatoru, cihazın minimal ekran eninin ən azı 600 dp olduğunu bildirir. Planşetlər (7" və daha böyük) üçün alternativ layoutlar yükləmək üçün istifadə olunur. Oriyentasiya təsir etmir — sw ekranın ən kiçik tərəfini nəzərə alır.
iOS-da müxtəlif Size Classes olan simulyator və SwiftUI-də müxtəlif ölçülü cihazlarla Preview istifadə edin. Android-də — emulatorda cihaz profilləri (Pixel 5, Pixel C, Galaxy Tab) və Android Studio-da Layout Validation. Hər iki platformada fiziki iPad/Android-planşet və qatlanan cihazda mütləq test edin.
Canonical layouts — Google Material Design 3-dən hazır adaptiv kompozisiya nümunələri: list-detail (siyahı + detallar), feed (kart lentləri), supporting pane (əsas məzmun + hərəkət paneli). Hər nümunənin üç variantı var (compact/medium/expanded) və avtomatik olaraq WindowSizeClass-ə uyğarlaşır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun