Responsive Design — interfeyslarni qurishga yondashuv bo'lib, unda layout avtomatik ravishda qurilmaning o'lchami, yo'nalishi va turiga moslashadi. Mobil ishlanmada responsive design iOS da size classes va Android da configuration qualifiers orqali amalga oshiriladi. Maqola adaptiv layout tamoyillarini, ikkala platformaning vositalarini va kod misollarini tahlil qiladi.
Asosiy
Responsive Design — interfeyslarni qurish usuli bo'lib, unda layout ekran o'lchamiga, yo'nalishiga va mavjud bo'shliqqa reaksiya beradi, elementlarning joylashuvini funksionallikni yo'qotmasdan qayta tashkil qiladi. Bu atama 2010 yilda Ethan Marcotte tomonidan veb-dizayn uchun taklif qilingan, ammo tamoyillar mahalliy mobil ilovalarga to'liq qo'llaniladi.
Mobil ishlanmada responsive design bir xil ilova barcha qurilmalarda to'g'ri ko'rsatilishini anglatadi: iPhone SE (375 pt) dan iPad Pro (1024 pt portretda) gacha va Android smartfonidan (360 dp) planshetgacha (800 dp). Asosiy elementlar: moslashuvchan tarmoq (flexible grid), adaptiv tasvirlar va media so'rovlari framework darajasida (size classes, qualifiers).
Apple Developer Documentation ga ko'ra, ilova universal bo'lishi kerak — iPad uchun alohida yig'ishsiz barcha qurilmalarda ishlashi kerak. Google Play Jetpack WindowManager va canonical layouts orqali adaptive layouts dan foydalanishni tavsiya qiladi. Planshetlarga moslashtirilmaganlik salbiy sharhlarning tez-tez uchraydigan sababidir.
Responsive va adaptive atamalari ko'pincha chalkashtiriladi, garchi ular turli yondashuvlarni tavsiflasa ham. Responsive design ekran kengligiga uzluksiz moslashadigan moslashuvchan tarmoqdan foydalanadi. Adaptive design oldindan belgilangan breakpoints uchun qat'iy layoutlardan foydalanadi — ilova ular orasida sakrab o'tadi.
| Xususiyat | Responsive Design | Adaptive Design |
|---|---|---|
| Yondashuv | Silliq oqim | Diskret o'tishlar |
| Tarmoq | Foizli, fluid | Har bir breakpoint uchun qat'iy |
| Amalga oshirish | Auto Layout, Flexbox, ConstraintLayout | Size Classes, layout-w600dp, alohida storyboardlar |
| Layout dizaynlar soni | Bitta, lekin moslashuvchan | Bir nechta (phone portrait, phone landscape, tablet) |
Amalda mobil ilovalar ikkala yondashuvning kombinatsiyasidan foydalanadi. Asosiy tarmoq responsive quriladi (Auto Layout constraint bog'liqliklari bilan) va breakpoint ga erishilganda (masalan, kenglik > 600 pt) layout elementlarning boshqa kompozitsiyasi bilan adaptiv versiyaga o'tadi. iOS Auto Layout (responsive) ni Size Classes (adaptive) bilan birlashtiradi. Android ConstraintLayout (responsive) ni qualifier resurslari (adaptive) bilan birlashtiradi.
Size Classes — iOS mexanizmi, ekranning mavjud maydonini ikki o'q bo'yicha tasniflaydi: gorizontal va vertikal. Har bir o'q Compact (C) yoki Regular (R) bo'lishi mumkin. Kombinatsiya layout moslashuvi uchun to'rt variant beradi: CR (oddiy iPhone portret), RR (iPad portret/landshaft), RC (iPhone landshaft Plus/Pro Max da), CC (iPad Split View).
// Swift-da Size Classes aniqlash
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 ko'rsatish
case (.compact, .regular):
showStackedView() // iPhone portret — stack layout
case (.compact, .compact):
showCompactView() // iPhone SE landshaft — minimallashtirilgan
default:
showDefaultView()
}
}
private func showSplitView() {
// UISplitViewController yoki HStack dan foydalanamiz
}
private func showStackedView() {
// iPhone uchun vertikal stack
}
private func showCompactView() {
// Ikkilamchi elementlarni yashiramiz, asosiylarini ko'rsatamiz
}
}Interface Builder da Size Classes „wAny hAny” paneli orqali sozlanadi — dasturchi ma'lum kombinatsiyani tanlaydi (wRegular hRegular, wCompact hRegular) va constraint variatsiyalarini qo'shadi. SwiftUI reaktiv moslashish uchun @Environment(\.horizontalSizeClass) va @Environment(\.verticalSizeClass) dan foydalanadi — yo'nalish yoki oyna o'lchami o'zgarganda SwiftUI avtomatik ravishda view ni qayta chizadi.
// SwiftUI-dagi Size Classes
import SwiftUI
struct ResponsiveView: View {
@Environment(\.horizontalSizeClass) private var hSizeClass
var body: some View {
if hSizeClass == .regular {
// iPad — yon panel bilan gorizontal layout
HStack {
SidebarView()
.frame(width: 300)
ContentView()
}
} else {
// iPhone — to'liq ekran vertikal stack
VStack {
ContentView()
}
}
}
}Configuration Qualifiers — Android mexanizmi, qurilma xususiyatlariga qarab turli resurslarni (layout, values, drawables) yuklash uchun. Kvalifikatorlar ekran o'lchami (small, normal, large, xlarge), yo'nalish (port, land), minimal kenglik (sw
// Kotlin-da qurilma konfiguratsiyasini aniqlash
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()
}
}
}Turli ekranlar uchun resurs tuzilishi: res/layout/activity_main.xml (telefon), res/layout-sw600dp/activity_main.xml (planshet 7"), res/layout-sw720dp/activity_main.xml (planshet 10"). Android smallestWidth asosida to'g'ri layout ni avtomatik tanlaydi — yo'nalishdan qat'iy nazar ekranning dp dagi minimal kengligi. sw
// Jetpack Compose — moslashtirish uchun 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 kutubxonasi) uch kenglik kategoriyasi bilan WindowSizeClass ni taqdim etadi: COMPACT (0–600 dp), MEDIUM (600–840 dp), EXPANDED (>840 dp). Bu eski qualifier papkalariga zamonaviy alternativadir. Google tomonidan yig'iladigan qurilmalar va planshetlarga moslashish uchun tavsiya etiladi.
Adaptiv tarmoq responsive design ning asosidir. Ruxsat etilgan o'lchamlar o'rniga elementlar foiz nisbatlari, moslashuvchan cheklovlar va intrinsic content size dan foydalanadi. Breakpoints — ekran kengligining nuqtalari, ularga erishilganda layout holatlar o'rtasida o'tadi.
| Breakpoint | iOS Size Class | Android Qualifier | Qurilma turi |
|---|---|---|---|
| 0–374 pt / dp | Compact width | — | iPhone SE, eski Android |
| 375–599 pt / dp | Compact width | sw320dp | iPhone 14, Galaxy S24 |
| 600–839 pt / dp | Regular width | sw600dp | iPad mini, 7" planshetlar |
| 840+ pt / dp | Regular width | sw720dp | iPad Pro, 10" planshetlar |
Google Material Design va Apple HIG tomonidan tavsiya etilgan breakpoints: 0–599 dp (telefon, bitta ustun), 600–839 dp (planshet, ikki ustun, navigation rail), 840+ dp (planshet, uch ustun, navigation drawer). Breakpoints soni 4 dan oshmasligi kerak — haddan tashqari ko'p o'tish nuqtalari qo'llab-quvvatlash va testlashni murakkablashtiradi.
Muvaffaqiyatli responsive design so'nggi o'n yillikda iOS va Android dasturchilari jamoasi tomonidan ishlab chiqilgan qoidalar to'plamiga rioya qilishni talab qiladi. Quyida Apple HIG, Google Material Design va ishlab chiqarish loyihalari tajribasiga asoslangan asosiy tavsiyalar keltirilgan.
Adaptiv dizaynning asosiy tamoyili: tarkib layout ni belgilaydi, aksincha emas. Agar iPad da iPhone dagi kabi kartalar to'plami, faqat eniga cho'zilgan holda ko'rsatilsa — bu responsive design emas. Responsive design kompozitsiyani qayta o'ylaydi: iPhone da — vertikal scroll, iPad da — yon panel bilan master-detail.
Tez-tez beriladigan savollar
Responsive Design ekran kengligiga silliq moslashadigan moslashuvchan tarmoqdan foydalanadi. Adaptive Layout breakpoint nuqtalarida qat'iy layoutlar o'rtasida o'tadi. Amalda ikkala yondashuv birlashtiriladi: responsive asosiy tarmoq + kardinal o'zgarishlar uchun adaptiv o'tishlar (telefon vs planshet).
iOS ikki o'qdan foydalanadi: gorizontal (Compact/Regular) va vertikal (Compact/Regular). iPhone portretda — Compact width, Regular height (CR). iPad — Regular width, Regular height (RR). iPhone Plus/Pro Max landshaftda — Regular width, Compact height (RC). Dasturchi har bir kombinatsiya uchun constraint variatsiyalarini belgilaydi.
sw600dp (smallestWidth 600 dp) — Android resurs kvalifikatori, qurilma ekranining minimal kengligi kamida 600 dp ekanligini bildiradi. Planshetlar (7" va kattaroq) uchun muqobil layoutlarni yuklash uchun ishlatiladi. Yo'nalish ta'sir qilmaydi — sw ekranning eng kichik tomonini hisobga oladi.
iOS da turli Size Classes li simulyator va SwiftUI da turli o'lchamdagi qurilmalar bilan Preview dan foydalaning. Android da — emulatordagi qurilma profillari (Pixel 5, Pixel C, Galaxy Tab) va Android Studio da Layout Validation. Ikkala platformada jismoniy iPad/Android planshet va yig'iladigan qurilmada majburiy test qiling.
Canonical layouts — Google Material Design 3 dan tayyor adaptiv kompozitsiya na'munalari: list-detail (ro'yxat + tafsilotlar), feed (kartalar lentasi), supporting pane (asosiy tarkib + harakatlar paneli). Har bir na'muna uch variantga ega (compact/medium/expanded) va avtomatik ravishda WindowSizeClass ga moslashadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.