Tüm Yazılar
KategoriAndroid
Okuma Süresi
16 dk okuma
Yayın Tarihi
...
Kelime Sayısı
919kelime

Kahveni hazırla - bu içerikli bir makale!

Material 3 Expressive design tokens, emphasis levels, dynamic color genişletmesi, motion schemes ve Compose Material 3 1.4 entegrasyonu.

Material 3 Expressive: Android 16 Design System

# Material 3 Expressive: Android 16 Design System

Material 3 Expressive, Google'ın 2025 sonunda duyurduğu ve Android 16 ile yaygınlaşan design system evolution'u. Material You (2021) ve Material 3 (2022) üzerine kurulu, "expressive" kısmı: emphasis levels, motion schemes, shape theming, genişletilmiş dynamic color. Bu yazı Material 3 Expressive'in design token'larını, Compose Material 3 1.4 entegrasyonunu ve existing app migration stratejisini anlatır.

💡 Pro Tip: Material 3 Expressive mandatory değil — Material 3 opsiyonel üstüne katman. Kullanırsan daha "lively" UI, kullanmazsan Material 3 standard stays.

İçindekiler


Expressive Nedir?

Material 3 "functional" odaklıydı. Expressive "personality" ekliyor:

  • More shapes: Beyond rounded rectangle — organic shapes
  • More color: 6 seed colors yerine palette-wide customization
  • More motion: Shared element transitions, implicit animations
  • More emphasis: Visual hierarchy explicit

Apple Human Interface Guidelines'ın "emphasis" konseptini Material'e getiriyor.


Emphasis Levels

Component'lerin visual weight'ini kontrol:

kotlin
1Button(
2 onClick = { ... },
3 colors = ButtonDefaults.filledTonalButtonColors(),
4 emphasis = Emphasis.Filled // High, Medium, Low
5) {
6 Text("Action")
7}

4 Emphasis Seviyesi

  • High: Primary actions (Floating Action Button, filled)
  • Medium: Secondary (filled tonal, outlined)
  • Low: Tertiary (text button, link)
  • Minimal: Icon button, ghost

Dynamic Color 2.0

Material You 6 seed color kullanıyordu. M3 Expressive 60+ intermediate token çıkarıyor:

kotlin
1@Composable
2fun MyTheme(content: @Composable () -> Unit) {
3 val context = LocalContext.current
4 val dynamicColor = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
5 dynamicLightColorScheme(context)
6 else lightColorScheme()
7 
8 // M3 Expressive ile daha fine-grained:
9 val expressiveColors = dynamicColor.withExpressiveTokens(
10 variant = ColorVariant.Expressive
11 )
12 
13 MaterialTheme(colorScheme = expressiveColors, content = content)
14}

Color Roles (Genişletilmiş)

  • Primary, On Primary
  • Primary Container, On Primary Container
  • Primary Fixed: (yeni), **On Primary Fixed**
  • Surface Container Lowest/Low/Medium/High/Highest: (5 seviye)
  • Outline Variant
  • Scrim: , **Shadow**

Total 50+ color role. Design team'inden developer'a geçişte daha az "invention" gerekir.


Motion Schemes

Predefined motion patterns:

kotlin
1val motionScheme = MotionScheme.expressive()
2 
3// Spring curves:
4motionScheme.fastSpatialSpring // 0.3s, high stiffness
5motionScheme.defaultSpatialSpring // 0.5s, medium
6motionScheme.slowSpatialSpring // 0.8s, low
7 
8// Effect curves:
9motionScheme.fastEffectsSpring
10motionScheme.defaultEffectsSpring
11motionScheme.slowEffectsSpring
12 
13@Composable
14fun ExpandableCard() {
15 var expanded by remember { mutableStateOf(false) }
16 
17 Card(
18 modifier = Modifier.animateContentSize(
19 animationSpec = motionScheme.defaultSpatialSpring
20 )
21 ) {
22 // content
23 }
24}

Shape Theming

Shape tokens expressive:

kotlin
1@Composable
2fun MyTheme(content: @Composable () -> Unit) {
3 val shapes = Shapes(
4 extraSmall = RoundedCornerShape(4.dp),
5 small = RoundedCornerShape(8.dp),
6 medium = RoundedCornerShape(12.dp),
7 large = RoundedCornerShape(16.dp),
8 extraLarge = RoundedCornerShape(28.dp),
9 
10 // Expressive additions:
11 expressiveFamily = ExpressiveShapeFamily.Organic, // Blob, wave, etc.
12 )
13 
14 MaterialTheme(shapes = shapes, content = content)
15}

Organic shapes (asymmetric, blob-like) character katıyor.


Typography Scales Genişleme

kotlin
1Typography(
2 displayLarge = TextStyle(fontSize = 57.sp, lineHeight = 64.sp),
3 displayMedium = TextStyle(fontSize = 45.sp, lineHeight = 52.sp),
4 displaySmall = TextStyle(fontSize = 36.sp, lineHeight = 44.sp),
5 headlineLarge = TextStyle(fontSize = 32.sp, lineHeight = 40.sp),
6 // ... 15+ existing
7 // Expressive additions:
8 labelLargeProminent = TextStyle(fontSize = 14.sp, fontWeight = FontWeight.ExtraBold),
9 bodyLargeEmphasized = TextStyle(fontSize = 16.sp, fontWeight = FontWeight.SemiBold)
10)

Compose Material 3 1.4

Library version ile Expressive gelir:

gradle
1dependencies {
2 implementation("androidx.compose.material3:material3:1.4.0")
3 implementation("androidx.compose.material3:material3-expressive:1.4.0-alpha")
4}

Yeni Component'ler

  • SearchBar: (predictive)
  • Carousel: (multi-browse, hero, contained)
  • RichTooltip: (expanded info)
  • NavigationSuite: (adaptive nav bar/rail/drawer)

Migration Stratejisi

Material 2 → Material 3 Expressive:

  1. Material 2 → Material 3 (önce bu adım, değilse)
  2. Color scheme migration: 6 seed → ColorScheme object
  3. Typography migration: 13 scale → 15 scale
  4. Shape migration: 3 → 5+ shapes
  5. Component replacement: Card, Button, TextField vb.

Sonra Expressive:

  1. Emphasis annotations ekle
  2. Motion schemes kullan
  3. Extended colors (Surface container variants)
  4. Organic shapes (selective, not overuse)

ALTIN İPUCU

Bu yazının en değerli bilgisi

Bu ipucu, yazının en önemli çıkarımını içeriyor.

Easter Egg

Gizli bir bilgi buldun!

Bu bölümde gizli bir bilgi var. Keşfetmek ister misin?

kotlin
1@Composable
2fun ExpressiveAppTheme(
3 darkTheme: Boolean = isSystemInDarkTheme(),
4 dynamicColor: Boolean = true,
5 content: @Composable () -> Unit
6) {
7 val colorScheme = when {
8 dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
9 val context = LocalContext.current
10 if (darkTheme) dynamicDarkColorScheme(context)
11 else dynamicLightColorScheme(context)
12 }
13 darkTheme -> darkColorScheme()
14 else -> lightColorScheme()
15 }
16 
17 val expressive = MaterialThemeExpressive(
18 colorScheme = colorScheme,
19 motionScheme = MotionScheme.expressive(),
20 typography = Typography, // With expressive variants
21 shapes = Shapes(expressiveFamily = ExpressiveShapeFamily.Standard)
22 )
23 
24 MaterialTheme(expressive = expressive) {
25 content()
26 }
27}

Okuyucu Ödülü

**External Resources:** - [Material 3 Expressive guidelines](https://m3.material.io/blog/expressive) - [Compose Material 3 1.4 changelog](https://developer.android.com/jetpack/androidx/releases/compose-material3) - [Design tokens reference](https://m3.material.io/foundations/design-tokens) - [Motion schemes guide](https://m3.material.io/styles/motion) - [Color roles](https://m3.material.io/styles/color/roles)

Sonuç

Material 3 Expressive "more personality" — emphasis levels, motion schemes, genişletilmiş color/shape/typography. Opsiyonel ama Google'ın Android 16+ için tavsiye ettiği direction. Selective kullanım (hero moments) best. Compose Material 3 1.4 ile production'da. 2027'de Material 4 speculation: spatial UI (visionOS benzeri) + AI-generated design.

*İlgili yazılar: Jetpack Compose 1.7, Kotlin 2.1, Flutter Riverpod.*

Etiketler

#Android#Material 3#Expressive#Design System#Compose#Material You#2026
Muhittin Çamdalı

Muhittin Çamdalı

Senior iOS Developer

12+ yıllık deneyime sahip iOS Developer. Swift, SwiftUI ve modern iOS mimarileri konusunda uzman. Apple platformlarında performanslı ve kullanıcı dostu uygulamalar geliştiriyorum.

iOS Geliştirme Haberleri

Haftalık Swift tips, SwiftUI tricks ve iOS best practices. Spam yok, sadece değerli içerik.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.

Paylaş

Bunu da begenebilirsiniz