Bugün, Jetpack Compose Ağustos 2026 sürümü kararlı hale geldi. Bu sürüm, temel Compose modüllerinde 1.12 sürümünü kullanıma sunuyor (tam BOM eşlemesini inceleyin). Bu sürümde, Mesh Gradients ve Wide Color Gamut (WCG) desteği gibi zengin görsel API'ler, Grid içinde adlandırılmış alanlar gibi yapısal düzen özellikleri, Android'in Kimlik Bilgisi Yöneticisi ile sorunsuz entegrasyon ve önemli test ve performans iyileştirmeleri yer alıyor.
Projenizi bugünkü sürüme güncellemek için Compose BOM sürümünüzü 2026.08.00 olarak yükseltin:
implementation(platform("androidx.compose:compose-bom:2026.08.00"))
Zarar Veren Değişiklikler (Breaking Changes)
- AGP ve Compile SDK: Compose 1.12, compileSdk'yı API 37'ye günceller ve minimum AGP 9.1.2 gerektirir. Compose'un her zaman en son compileSdk'yı hedefleyeceğini hatırlatırız. Bu değişiklik hakkında daha fazla bilgiyi burada bulabilirsiniz.
Modifier.onFirstVisible()desteği sonlandırıldı: Daha hassas görünürlük eşiği izleme sağlayan Modifier.onVisibilityChanged()'a geçin.
Grafik
Ağ renk geçişleri
Compose 1.12, çok noktalı ve doğal renk geçişleri oluşturmanıza yardımcı olmak için MeshGradientPainter özelliğini sunar.
val rows = 1 val columns = 1 val gradientPainter = remember { MeshGradientPainter(rows, columns) { // Parameters: row, column, position, color setVertex(0, 0, Offset(0f, 0f), Color.Red) // Top-Left setVertex(0, 1, Offset(1f, 0f), Color.Blue) // Top-Right setVertex(1, 0, Offset(0f, 1f), Color.Green) // Bottom-Left setVertex(1, 1, Offset(1f, 1f), Color.Yellow) // Bottom-Right } } Box( modifier = modifier .aspectRatio(16/9f) .fillMaxWidth() .paint(gradientPainter) )
Daha fazla bilgi ve örnek için belgelere bakın.
Geniş renk gamı ve HDR desteği
Modern ekranlar, daha fazla renk doğruluğu ve daha yüksek dinamik aralık sunar. Compose 1.12'de, Compose grafikleri, boya ve gölgelendiricilerinde geniş renk gamı (P3) ve HDR oluşturma için tam ardışık düzen desteği etkinleştirildi. sRGB olmayan renk alanlarında (ör. Display P3) tanımlanan renkler, renk sınırlaması olmadan platform oluşturma işlemine kadar korunur. Renkler, desteklenmeyen bir renk alanı (ör. CieXyz, CieLab veya Oklab) kullanıyorsa, desteklenmeyen bir Android sürümündeki renk alanına (ör. Android 13 ve önceki sürümlerde Bt2020Hlg) bağlıysa veya uygulama Android 9 (API 28) ve önceki sürümlerde çalışıyorsa güvenli bir şekilde sRGB'ye geri döner.
Diğer önemli değişiklikler:
GraphicsLayerveModifier.graphicsLayer'eLayerOutsetseklendi. Bu özelliği, katmanın görsel sınırlarını ölçülen boyutunun ötesine taşımak için kullanabilirsiniz. Katman, ekran dışı arabelleğe yükseltildiğinde örtülüclipToBoundsdavranışından kaçınmak içinLayerOutsetsuygulayın.
Stiller
Google I/O'da, Compose Styles API ile ilgili ilk vizyonumuzu paylaştık. Bu API, bileşenleri stilize etmenin birleştirilmiş ve yüksek performanslı bir yolunu sunuyor. O zamandan beri, katı tür güvenliğini ve öngörülebilir doğruluğu garanti etmek ve özel tasarım sistemleri oluşturmayı desteklemek için temel mimariyi geliştirmeye devam ettik.
Bu temel katmanın doğru olmasını sağlamak için API deneysel olarak kalacak ve önemli değişiklikler bekleyebilirsiniz.
Çalışma Zamanı Optimizasyonları
Keyed SideEffect Overload
SideEffect artık önemli bağımsız değişkenleri destekliyor. Bu sayede, belirli anahtarlar her değiştiğinde tek seferlik yan etkiler tetikleyebilirsiniz. Bu, eş yordam veya atma bloğuna ihtiyacınız olmadığında LaunchedEffect veya DisposableEffect kullanmaya kıyasla daha iyi performans elde etmenizi sağlayabilir. SideEffect, LaunchedEffect'ten% 90'a kadar, DisposableEffect'den ise yaklaşık% 20 daha hızlıdır. SideEffect, DisposableEffect ve LaunchedEffect'den önce çalıştığından, mevcut efektleri bu API'ye taşırken dikkatli olun. Özellikle de mevcut kare tamamlandıktan sonra gönderilmeye bağlı olan LaunchedEffects için bu durum geçerlidir.
@Composable fun AnalyticsTracker(userId: String, screenName: String) { SideEffect(key1 = userId, key2 = screenName) { analytics.logScreenView(userId, screenName) } }
Animasyon
DeferredTargetAnimationdeneysel durumdan çıktı.
Etkileşimli İki Aşamalı Geçişler
- Yeni composable'lar:
DeferredAnimatedContentveDeferredAnimatedVisibility, tahmin edilen geri gitme hareketi izleme gibi keyifli iki aşamalı geçişler oluşturmaya olanak tanır. - Manuel animasyon kontrolü: Geçişin ertelenmiş aşamasında, animasyonlu özellikler (ör.ölçek veya ofset) artık manuel olarak anlık şekilde değiştirilebilir (ör. kaydırma hareketini izleme).
- Sorunsuz geçiş: Ertelenmiş aşama sona erdiğinde geçiş motoru devreye girer ve otomatik geçişe hız aktarımı da dahil olmak üzere sorunsuz bir geçiş gerçekleştirir.
- Paylaşılan öğe desteği:
SharedContentConfigiçindeki yenipermitTransformDuringDeferredTransitionişareti, ertelenmiş geçiş aşamasında paylaşılan öğelerin üst kapsayıcılarıyla birlikte görsel olarak dönüştürülüp dönüştürülmeyeceğini kontrol eder.
val state = remember { DeferredTransitionState(initialScreen) } val transition = rememberDeferredTransition(state) if (predictiveBackInProgress) { state.defer(targetScreen) } else { state.animateTo(targetScreen) } transition.DeferredAnimatedContent( targetState = targetScreen, mutableTransformSpec = { MutableContentTransform { // Manually manipulate properties during the deferred phase initialContentTransform { scale = swipeProgress } } } ) { screen -> ScreenContent(screen) }
Aşağıda, harekete dayalı bir animasyonun tetiklenen bir animasyona aktarıldığı kullanım alanlarına ilişkin iki demo bulunmaktadır:
Metin, Giriş ve Platform Entegrasyonları
Düzenlenebilir Metin Biçimlendirmesi
Yeni API'ler, BasicTextField içindeki düzenlenebilir metinler için zengin metin biçimlendirmesi sunar. Artık SpanStyle ve ParagraphStyle kullanarak satır içi karakter ve paragraf biçimlendirmesini programatik olarak uygulayabilir ve değiştirebilirsiniz. Bunun için addStyle() yöntemini TextFieldBuffer kapsamı (ör. textFieldState.edit { ... } veya InputTransformation) içinde kullanmanız gerekir. Ayrıca, TextFieldBuffer, getSpanStyles() ve getParagraphStyles() API'lerini sağlayarak TrackedRange nesnelerini döndürür. Bu sayede, uygulanan stilleri okuyabilir, güncelleyebilir veya kaldırabilirsiniz. Biçimlendirme oluşturma özelliğini tamamlamak için TextFieldState artık aralıklar genelinde etkin stilleri sorgulamak üzere salt okunur bir textStyles özelliği sunuyor. TextFieldBuffer ise düzenlemeden önce biçimlendirme durumunu incelemek için originalTextStyles sağlıyor. Metin biçimlendirme ve özel ek açıklamalar, yapılandırma değişikliklerinde korunur.
val state = rememberTextFieldState("Formatted text in Compose 1.12") // Apply bold and color styles to a range of text state.edit { addStyle( SpanStyle(fontWeight = FontWeight.Bold, color = Color.Blue), start = 0, end = 9 ) } // Query active styles from TextFieldState val currentStyles = state.textStyles
Metin Seçimi
Yeni bir SelectionState API, SelectionContainer içindeki metin seçiminde programatik kontrol ve gözlemlenebilirlik sağlar. SelectionState nesnesini rememberSelectionState() aracılığıyla yükseltip SelectionContainer'ye iletmek, selectedTexts'ü AnnotatedStrings'nin reaktif bir listesi olarak kullanıma sunar ve selectAll(), clear(), select(TextRange) ve extendSelectionByWord() gibi yöntemler sağlar.
Ayrıca, düzen sırasındaki tüm seçilebilir metin öğelerini almak için getSelectableTexts() öğesini kullanın ve SelectionContainer içindeki composable'larda metin seçmek için genel bir aralık kullanın.
@Composable fun ProgrammaticSelectionExample() { val selectionState = rememberSelectionState() Column { Button( onClick = { selectionState.selectAll() }, modifier = Modifier.disableSelectionClearOnTap() ) { Text("Select All") } SelectionContainer(state = selectionState) { Text("Text content to be selected programmatically.") } } }
Kimlik Bilgisi Yöneticisi Entegrasyonu
Compose metin alanları artık Android'in Kimlik Bilgisi Yöneticisi (API 34+) ile Otomatik Doldurma çerçevesi üzerinden yerel olarak entegre ediliyor (API 34'ten önceki sürümlerde androidx.credentials library tarafından işlenir). Yeni credentialRequest semantik özelliği CredentialRequestData ile eklenerek metin girişleri, kullanıcı girişi akışında doğrudan geçiş anahtarlarını, kayıtlı kimlik bilgilerini veya oturum açma isteklerini isteyebilir.
@Composable fun LoginField(textFieldState: TextFieldState) { val credentialData = remember { CredentialRequestData( // Specify Credential Manager request options ) } BasicTextField( state = textFieldState, modifier = Modifier.semantics { credentialRequest = credentialData } ) }
Diğer önemli değişiklikler:
- İndirilebilir yazı tiplerinde yazı tipi varyasyon ayarları desteği.
SelectionContainer'da metin seçimini görüntü alanının dışına sürüklerken otomatik kaydırma etkinleştirildi.- Otomatik etkileşim sesleri (tıklamalar ve odak gezinme) için Compose bileşenlerine destek eklendi. Kapsam dışında kalmaya izin veren yeni bir
SoundEffectOnInteractioncomposable'ı kullanabilirsiniz. Bu değişiklik sonucunda, semantik tıklama işleyicilerinin artık ana ileti dizisinden çağrılması gerektiğini ve bunun az sayıda test senaryosunu etkileyebileceğini unutmayın. KeyboardTypeartıkDate,Time,DateTimeveSignedDecimal'ı içeriyor.BasicSecureTextFieldartık varsayılan olarakTextObfuscationMode.SystemkullanırkenRevealLastTypedmutlak bir geçersiz kılma işlevi görür.
Düzen geliştirmeleri
Izgara düzeninde adlandırılmış alanlar
@Experimental Izgara bileşenindeki adlandırılmış alanlar sayesinde artık karmaşık 2D düzenler oluşturmak daha kolay. Öğeler genelinde sayısal sütun ve satır dizinlerini yönetmek yerine GridConfigurationScope içinde anlamsal bölgeler tanımlayabilir ve composable'ları alan adına göre konumlandırabilirsiniz.
@OptIn(ExperimentalGridApi::class) @Composable fun DashboardLayout() { Grid( config = { area("header", row = 0, column = 0, rowSpan = 1, columnSpan = 2) area("sidebar", row = 1, column = 0) area("content", row = 1, column = 1) gap(16.dp) } ) { HeaderSection(modifier = Modifier.gridItem(areaId = "header")) NavigationSidebar(modifier = Modifier.gridItem(areaId = "sidebar")) MainContentView(modifier = Modifier.gridItem(areaId = "content")) } }
Daha fazla bilgi için belgeleri inceleyin.
Performans
Her sürümde olduğu gibi, Compose'un performansına yatırım yapmaya devam ediyoruz. Böylece bu çerçeve, güzel ve yüksek performanslı uygulamalar oluşturmanıza yardımcı oluyor. Bu sürümde, başlangıç performansını iyileştirmeye odaklandık ve artık karşılaştırmalarımızda Görüntülemeler ile karşılaştırılabilir bir İlk Görüntüleme Süresi (bir uygulamanın ilk karesini oluşturması için geçen süre) görüyoruz.
Test ve Araç Yükseltmeleri
Test Senkronizasyonu
Compose 1.12, test yürütme sürelerini kısaltmak ve durum örnekleme sırasında kararsızlığı ortadan kaldırmak için tasarlanmış yeni test API'lerini kullanıma sunuyor:
hasPendingWork: Saati ilerletmeden kullanıcı arayüzünde bekleyen iş olup olmadığını pasif olarak kontrol eder. Bu, manuel animasyon döngüleri için idealdir.runWithoutImplicitWait: Manuel saat kareleri arasında ilerlerken (ör. animasyon testleri) örtülü senkronizasyonu geçici olarak devre dışı bırakır.
@Test fun testAnimationStateFast() { composeTestRule.mainClock.autoAdvance = false while (composeTestRule.hasPendingWork()) { composeTestRule.mainClock.advanceTimeByFrame() composeTestRule.waitForIdle() composeTestRule.runOnUiThread { composeTestRule.runWithoutImplicitWait { // This is most effective when querying multiple nodes in a single frame. // It prevents the redundant synchronization overhead that would // otherwise occur on every individual query. val box1 = composeTestRule.onNodeWithTag("Box1").fetchSemanticsNode() val box2 = composeTestRule.onNodeWithTag("Box2").fetchSemanticsNode() assertThat(box1.boundsInRoot.right).isAtMost(box2.boundsInRoot.left) } } } }
Diğer önemli değişiklikler:
captureToImageAPI artık bir pop-up'ı veya iletişim kutusunu, tek bir bit eşlemde bağlantısıyla birlikte yakalamanıza olanak tanıyor.- Compose semantik aramalarının kapsamını belirli Android görünümleriyle sınırlamak için
onRootWithViewInteractioneklendi. Bu sayede, üretim kodunda benzersiz test etiketleri gerektirmedenRecyclerViewsgibi karma kullanıcı arayüzlerinin test edilmesi kolaylaşır. @PreviewWrapperek açıklamaları artık özel@MultiPreviewsınıflarına uygulanabilir. Böylece, birden fazla bileşende yeniden kullanılabilir önizleme ayarları (ör. özel temalar) etkinleştirilir.
Keyifli beste çalışmaları!
Compose 1.12; ağ gradyanları, geniş renk gamı desteği, indirilebilir değişken yazı tipleri, Credential Manager entegrasyonu ve daha hızlı test araçlarıyla uygulama geliştirmeyi her zamankinden daha kolay ve etkileyici hale getiriyor. Her zaman olduğu gibi görüşlerinize değer veriyoruz. Bu nedenle, lütfen bu değişikliklerle ilgili geri bildirimlerinizi veya sorun izleyicimizde görmek istediğiniz diğer özellikleri bizimle paylaşın. İyi yazmalar!
-
Ürün HaberleriGooglebook, ortak bir Android temeli üzerine inşa edilmiş yeni bir dizüstü bilgisayar kategorisini tanıtıyor. HP, Dell, Lenovo, Acer ve Asus gibi iş ortaklarının yüksek performanslı donanımları, mobil kolaylığı masaüstü gücüyle birleştirir.
Fahd Imtiaz, Loryn Hairston • Okuma süresi: 4 dakika -
Ürün HaberleriPixel 11 Pro Fold, Pixel Watch 5 ve tüm Pixel ailesinin tanıtılmasıyla birlikte kullanıcılar, farklı ekran boyutları, benzersiz duruşlar ve akıllı deneyimler arasında sorunsuz bir şekilde geçiş yapıyor.
-
Ürün HaberleriBugün, Jetpack Compose 1.0'ın yayınlanmasının beşinci yılını resmen kutluyoruz. 28 Temmuz 2021'de duyurulan 1.0 sürümünden en son 1.11 sürümüne kadar API'lerin yıllar içinde önemli ölçüde geliştiğini gördük ve bu gelişmeyi kutlamak istiyoruz.
Rebecca Franks, Nick Butcher, Loryn Hairston • Okuma süresi: 4 dakika
Android geliştirmeyle ilgili en son analizleri haftalık olarak gelen kutunuza alın.