Elevation — Material Design-ning asosiy tushunchasi bo'lib, elementning Z o'qi bo'ylab (ekranga perpendikulyar) balandligini aniqlaydi. Elevation dp da o'lchanadi va element tashlaydigan soyaning o'lchami va xiraligiga bevosita ta'sir qiladi. Elevation qanchalik yuqori bo'lsa, element foydalanuvchiga shunchalik yaqin va uning vizual og'irligi shunchalik sezilarli bo'ladi. Material Design 3 (Google, 2026) ma'lumotlariga ko'ra, kartalar uchun standart elevation 1 dp, FloatingActionButton uchun — 6 dp, dialoglar uchun — 24 dp. Soyalarni amalga oshirish haqida batafsil UI-dagi soyalar haqida maqolada o'qing.
Asosiy fikrlar
Elevation — Material Design (Google I/O 2014) ga kiritilgan metrika bo'lib, elementning Z o'qi bo'ylab o'rnini tavsiflaydi. X va Y dan (ekranning ikki o'lchovli tekisligi) farqli o'laroq, Z tekislik ustidagi balandlikdir. Elevation dp (density-independent pixels) da ifodalanadi va ikkita vizual effektni aniqlaydi: elevation o'sishi bilan kattaroq va xiraroq bo'ladigan soya (shadow) va chizish tartibi (yuqori elevation ga ega elementlar pastki elevation li elementlarning ustiga chiziladi).
Jismoniy metafora: stol ustidagi qog'oz varaqlarini tasavvur qiling. Uyum qanchalik baland bo'lsa, yuqori varaqning soyasi shunchalik uzun bo'ladi. Elevation Material Design da xuddi shunday ishlaydi: har bir element ma'lum bir balandlikdagi „raqamli varaq"dir. Foydalanuvchi element bilan o'zaro aloqada bo'lganda (tugmani bosganda, kartani ko'targanda), elevation vaqtincha oshadi — bu „o'zaro ta'sir elevatsiyasi" (interaction elevation) deb ataladi.
Material Design Guidelines (Google, 2026) ga ko'ra, elevation dan to'g'ri foydalanish interfeysning skanerlanishini 35% yaxshilaydi: foydalanuvchilar interaktiv elementlarni tezroq topadi, chunki ular tekis kontentdan „chiqib turadi". Biroq, elevation darajalarining haddan tashqari ko'pligi (4 dan ortiq) bu ta'sirni kamaytiradi: agar barcha elementlar suzib yursa, hech biri muhim ko'rinmaydi.
Android-da elevation API 21 (Android 5.0 Lollipop) dan boshlab View-ning o'rnatilgan xususiyati sifatida amalga oshirilgan. View.elevation pikseldagi (px) asosiy balandlikni o'rnatadi, View.translationZ esa animatsiyalar uchun qo'shimcha siljishdir (masalan, bosganda). Umumiy vizual balandlik = elevation + translationZ. Ikkala xususiyat ViewPropertyAnimator yoki ObjectAnimator orqali animatsiyani qo'llab-quvvatlaydi.
<!-- XML: elevation va translationZ -->
<Button
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="4dp"
android:translationZ="2dp"
android:stateListAnimator="@anim/button_elevation"
android:text="Elevatsiyali tugma" />
StateListAnimator — View holatiga (pressed, focused, enabled) qarab elevation va translationZ animatsiyasi uchun XML resursi. Masalan, tugma bosilganda elevation 2 dp dan 8 dp gacha oshib, ko'tarilish effektini yaratishi mumkin. StateListAnimator View-ning istalgan xususiyatlari uchun ObjectAnimator orqali animatsiyani qo'llab-quvvatlaydi.
// Kotlin: elevation ni dasturiy sozlash
import android.animation.ObjectAnimator
import android.view.View
val myButton: View = findViewById(R.id.myButton)
myButton.elevation = 4f // px dagi asosiy balandlik
// Bosilganda elevation animatsiyasi
val animator = ObjectAnimator.ofFloat(
myButton,
"translationZ",
0f,
8f
).apply {
duration = 150
repeatMode = ValueAnimator.REVERSE
repeatCount = 1
}
OutlineProvider — elevation dan soyani to'g'ri chizish uchun asosiy komponent. Android sukut bo'yicha fon drawable asosida kontur yaratadigan ViewOutlineProvider.BACKGROUND dan foydalanadi. Yumaloq burchakli View (shape drawable orqali) uchun maxsus OutlineProvider o'rnatilishi kerak, aks holda soya to'rtburchak shaklida bo'ladi. Material komponentlari (CardView, MaterialButton) OutlineProvider ni avtomatik boshqaradi.
Material Design 3 (Material You) Material Design 2 bilan solishtirganda elevation tizimini qayta ko'rib chiqdi. 12 sobit daraja (Material 2) o'rniga M3 har biri ma'lum bir elevation darajasiga mos keladigan 5 asosiy ton (tone) ni taklif qiladi. Bundan tashqari, M3 Android 12+ da „rangli soya" (color shadow) tushunchasini kiritadi: soya qora-kulrang bo'lish o'rniga temaning aksent rangiga bo'yalishi mumkin.
| Daraja | Elevation | Qo'llanish | SOYA (yorug' tema) |
|---|---|---|---|
| Level 0 | 0 dp | Fonlar, Surface konteynerlari | Soyasiz |
| Level 1 | 1 dp | Kartalar, ListItem, menyu | 0.05 opacity, 2px blur |
| Level 2 | 3 dp | Search bar, Bottom navigation | 0.08 opacity, 4px blur |
| Level 3 | 6 dp | FAB, FloatingActionButton | 0.11 opacity, 8px blur |
| Level 4 | 8 dp | Snackbar, Bottom sheet | 0.12 opacity, 12px blur |
| Level 5 | 12 dp | Navigation drawer, Dialog | 0.14 opacity, 16px blur |
| Level 6 | 24 dp | Modal dialog, Popup menu | 0.15 opacity, 24px blur |
Interaction elevation — foydalanuvchining element bilan o'zaro ta'siri paytida elevation ning vaqtincha oshirilishi. Material Design 3 da interaktiv elementlar (tugmalar, kartalar) bosilganda (pressed state) yoki fokusda (focused state) asosiy elevation ga +1–2 dp oladi. FloatingActionButton uchun interaction elevation +6 dp ni tashkil qiladi. Holatlar orasidagi o'tish animatsiyasi tabiiy taktil hissiyot uchun 150–200 ms davom etishi kerak.
Jetpack Compose o'rnatilgan elevation parametriga ega Card va Surface komponentlari orqali elevation ni qo'llab-quvvatlaydi. View System dan farqli o'laroq, Compose soyalarni o'zining render dvigateli orqali chizadi, bu Android ning barcha versiyalarida (API 21+) bir xil harakatni ta'minlaydi. Modifier.shadow() — istalgan composable ga soya qo'shish uchun past darajadagi modifikator.
// Jetpack Compose: Surface va Card orqali elevation
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Surface
Card(
elevation = CardDefaults.cardElevation(
defaultElevation = 4.dp,
pressedElevation = 8.dp,
focusedElevation = 6.dp
),
colors = CardDefaults.cardColors(
containerColor = MaterialTheme.colorScheme.surface
)
) {
Text("Elevation bilan boshqariladigan karta")
}
// Maxsus shakllar uchun Modifier.shadow
Surface(
modifier = Modifier
.shadow(elevation = 6.dp, shape = RoundedCornerShape(16.dp))
.clickable { /* harakat */ },
shape = RoundedCornerShape(16.dp),
color = MaterialTheme.colorScheme.surface
) { Text("Soyali sirt") }
Elevation animatsiyasi Compose da animateFloatAsState yoki Animatable orqali amalga oshiriladi. Elevation o'zgarganda, Compose avtomatik ravishda soyani animatsiya qiladi. Interaktiv elementlar uchun elevation ning bosish, fokus va tortishga reaksiya berishi uchun M3 InteractionSource dan animateElevation bilan birgalikda foydalaning. Compose 1.2+ da Material 3 temaning primary Container rangiga bo'yalgan soya — color shadow ni qo'llab-quvvatlaydi.
iOS-da Material Design dan olingan o'rnatilgan elevation analogi yo'q. Apple-ning Human Interface Guidelines soyalarni boshqarish uchun Z koordinatasidan foydalanmaydi — buning o'rniga dasturchilar soyalarni qo'lda CALayer.shadow* orqali sozlashadi. Biroq, soyalar va chuqurlik orqali vizual iyerarxiya tushunchasi iOS da ham mavjud: modal taqdimotlar, UIAlertController, UIPopoverPresentationController — barchasi fondan ajralish uchun soyalardan foydalanadi.
iOS da elevation simulyatsiyasi uchun dasturchilar shadowOpacity + shadowRadius + shadowOffset kombinatsiyasidan foydalanadilar. Kerakli „balandlik" qanchalik katta bo'lsa, soyaning xiralik radiusi va siljishi shunchalik katta bo'ladi. SwiftUI da soyalar .shadow() modifikatori orqali parametrlar bilan o'rnatiladi. iOS da Material-ga o'xshash harakat uchun Google dan Material Components for iOS (MDC) kutubxonalari mavjud.
// iOS: CALayer orqali elevation simulyatsiyasi
import UIKit
extension UIView {
func applyElevation(level: Int) {
let elevationMap: [Int: (CGFloat, CGFloat, CGFloat)] = [
1: (0.05, 1, 2),
2: (0.08, 2, 4),
3: (0.11, 4, 8),
4: (0.12, 6, 12),
5: (0.14, 8, 16),
6: (0.15, 12, 24)
]
let (opacity, offset, radius) = elevationMap[level] ?? (0.08, 2, 4)
layer.shadowColor = UIColor.black.cgColor
layer.shadowOpacity = Float(opacity)
layer.shadowOffset = CGSize(width: 0, height: offset)
layer.shadowRadius = radius
layer.shouldRasterize = true
layer.rasterizationScale = UIScreen.main.scale
}
}
// Foydalanish
cardView.applyElevation(level: 3) // 6 dp ekvivalenti
Material Components for iOS (MDC-iOS) — Material Design elevation ni iOS ga port qiladigan Google kutubxonasi. MDC-iOS oldindan belgilangan qiymatlar bilan MDCShadowElevation klassini, soya chizish uchun MDCShadowLayer ni va to'g'ri elevation bilan Material kartalari uchun MDCCard ni taqdim etadi. MDC-iOS stateful shadow properties orqali bosilganda elevation animatsiyasini qo'llab-quvvatlaydi.
Tez-tez beriladigan savollar
Elevation — elementning Z tekisligidagi asosiy balandligi (XML yoki kodda o'rnatiladi). translationZ — animatsiya uchun dinamik siljish (masalan, bosilganda). Vizual balandlik = elevation + translationZ. elevation ViewPropertyAnimator orqali, translationZ esa ObjectAnimator orqali animatsiya qilinadi. Vaqtinchalik balandlik o'zgarishlari uchun translationZ dan, doimiy o'zgarishlar uchun elevation dan foydalaning.
Material Design 3 dizaynerlar va dasturchilarning kognitiv yukini kamaytirish uchun elevation tizimini 12 darajadan 7 darajaga soddalashtirdi. Aniq qiymatlar (2 dp, 4 dp, 8 dp) o'rniga M3 oldindan belgilangan soya parametrlari bilan tonlardan (Level 0–6) foydalanadi. Android 12+ da ilova temasiga moslashadigan rangli soyalar (color shadow) uchun qo'llab-quvvatlash qo'shildi.
Elevation o'z-o'zidan ishlashga ta'sir qilmaydi, chunki soya apparat orqali (GPU) chiziladi. Biroq, elevation ning tez-tez o'zgarishi (animatsiya paytida har bir kadr) View va unga qo'shni hududlarning qayta chizilishiga olib kelishi mumkin. Animatsiya uchun elevation ni o'zgartirish o'rniga translationZ dan foydalaning, chunki translationZ tez-tez o'zgarishlar uchun optimallashtirilgan. 20+ elementli elevation ga ega murakkab ekranlar uchun view.setLayerType(View.LAYER_TYPE_HARDWARE, null) ni yoqing.
Android da elevation har doim elementni fon ustida ko'taradi va chizish tartibini (z-order) o'zgartiradi. Agar faqat soya kerak bo'lsa, z-order ni o'zgartirmasdan, CardView da cardUseCompatPadding yoki onDraw() da Paint.setShadowLayer() orqali maxsus soya chizishdan foydalaning. Jetpack Compose da Modifier.graphicsLayer { shadowElevation = 4f } dan foydalaning.
Material Design komponentlari sobit elevation ga ega: FloatingActionButton — 6 dp (bosilganda 12 dp), CardView — 1–8 dp (sozlanishi), BottomNavigationView — 8 dp, Toolbar — 4 dp, Snackbar — 6 dp, Dialog — 24 dp. Material Components Library dan MaterialButton 2 dp elevation ga ega va bosilganda 8 dp gacha ko'tariladi.
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.