Bugün, Jetpack Compose Nisan 2026 sürümü kararlı hale geldi. Bu sürümde, temel Compose modüllerinin 1.11 sürümü (tam BoM eşlemesine bakın), paylaşılan öğe hata ayıklama araçları, dokunmatik yüzey etkinlikleri ve daha fazlası yer alıyor. Ayrıca, denemenizi ve geri bildirimde bulunmanızı istediğimiz deneysel API'lerimiz de var.
Bugünkü sürümü kullanmak için Compose BOM sürümünüzü şu sürüme yükseltin:
implementation(platform("androidx.compose:compose-bom:2026.04.01"))
Compose 1.11.0 sürümündeki değişiklikler
Testlerde eş yordam yürütme
Compose'un test zamanlamasını ele alma şekliyle ilgili önemli bir güncellemeyi kullanıma sunuyoruz. Compose 1.10'da duyurulan erken erişim döneminin ardından v2 test API'leri artık varsayılan olarak kullanılıyor ve v1 API'leri kullanımdan kaldırıldı. Temel değişiklik, varsayılan test dağıtıcısında yapılan değişikliktir. v1 API'leri, eş yordamları hemen yürüten UnconfinedTestDispatcher'ye dayanırken v2 API'leri StandardTestDispatcher'ı kullanır. Bu, testlerinizde bir eş yordam başlatıldığında artık sıraya alındığı ve sanal saat ilerletilene kadar yürütülmediği anlamına gelir.
Bu yöntem, üretim koşullarını daha iyi taklit ederek yarış koşullarını etkili bir şekilde ortadan kaldırır ve test paketinizi önemli ölçüde daha sağlam ve daha az kararsız hale getirir.
Testlerinizin standart eş yordam davranışıyla uyumlu olmasını sağlamak ve gelecekteki uyumluluk sorunlarını önlemek için test paketinizi taşımanızı önemle tavsiye ederiz. API eşlemeleri ve yaygın düzeltmeler için kapsamlı geçiş rehberimize göz atın.
Paylaşılan öğe iyileştirmeleri ve animasyon araçları
Ayrıca, paylaşılan öğeler ve Modifier.animatedBounds için bazı kullanışlı görsel hata ayıklama araçları da ekledik. Artık hedef sınırları, animasyon yörüngeleri ve kaç eşleşme bulunduğu gibi arka planda tam olarak neler olduğunu görebilirsiniz. Bu sayede, bir geçişin neden beklendiği gibi çalışmadığını tespit etmek çok daha kolay hale gelir. Yeni aracı kullanmak için SharedTransitionLayout'unuzu LookaheadAnimationVisualDebugging composable ile sarmalamanız yeterlidir.
LookaheadAnimationVisualDebugging( overlayColor = Color(0x4AE91E63), isEnabled = true, multipleMatchesColor = Color.Green, isShowKeylabelEnabled = false, unmatchedElementColor = Color.Red, ) { SharedTransitionLayout { CompositionLocalProvider( LocalSharedTransitionScope provides this, ) { // your content } } }
Dokunmatik yüzey etkinlikleri
Dizüstü bilgisayarlara yerleşik dokunmatik yüzeyler, tabletlere takılabilen dokunmatik yüzeyler veya harici/sanal dokunmatik yüzeyler gibi dokunmatik yüzeyler için Oluşturma desteğini yeniledik. Temel trackpad etkinlikleri artık genel olarak PointerType.Mouse etkinlikleri olarak kabul edilecek. Böylece fare ve trackpad davranışları, kullanıcı beklentileriyle daha iyi eşleşecek şekilde düzenlenecek. Daha önce bu trackpad etkinlikleri, PointerType.Touch'nın sahte dokunmatik ekran parmakları olarak yorumlanıyordu. Bu da kafa karıştırıcı kullanıcı deneyimlerine yol açıyordu. Örneğin, dokunmatik yüzeyle tıklayıp sürüklemek seçmek yerine kaydırma işlemi yapardı. Compose'un en son sürümünde bu etkinliklerin işaretçi türü değiştirildiğinden, dokunmatik yüzeyle tıklama ve sürükleme işlemleri artık kaydırma yapmayacak.
Ayrıca, API 34'ten beri platform tarafından tanınan daha karmaşık trackpad hareketleri için destek ekledik. Bu hareketler arasında iki parmakla kaydırma ve parmakla yakınlaştırma yer alıyor. Bu hareketler, izleme panelleriyle daha iyi bir deneyim sunmak için Modifier.scrollable ve Modifier.transformable gibi bileşenler tarafından otomatik olarak tanınır.
Bu değişiklikler, gereksiz dokunma eğiminin kaldırılması, daha sezgisel bir sürükle ve bırak başlatma hareketi, metin alanlarında çift tıklama ve üç kez tıklama ile seçim ve metin alanlarında masaüstü stili bağlam menüleri gibi özelliklerle yerleşik bileşenlerdeki dokunmatik yüzeylerin davranışını iyileştirir.
Trackpad davranışını test etmek için performTrackpadInput, ile yeni test API'leri vardır. Bu API'ler, uygulamalarınızın trackpad ile kullanıldığında davranışını doğrulamanıza olanak tanır. Özel hareket algılayıcılarınız varsa dokunmatik ekranlar, fareler, dokunmatik yüzeyler ve kalemler dahil olmak üzere giriş türleri genelinde davranışı doğrulayın ve fare kaydırma tekerlekleri ile dokunmatik yüzey hareketleri için destek sağlayın.
Bileşim ana makinesi varsayılanları (Compose çalışma zamanı)
compose-runtime aracılığıyla doğrudan ana makine düzeyinde hizmetler sunmak için HostDefaultProvider, LocalHostDefaultProvider, HostDefaultKey ve ViewTreeHostDefaultKey'ı kullanıma sunduk. Bu sayede kitaplıkların aramalar için compose-ui'ya bağımlı olması gerekmez ve Kotlin Multiplatform daha iyi desteklenir. Kitaplık yazarları, bu değerleri kompozisyon ağacına bağlamak için compositionLocalWithHostDefaultOf kullanarak ana makinedeki varsayılanları çözen bir CompositionLocal oluşturabilir.
Önizleme sarmalayıcıları
Android Studio özel önizlemeleri, Compose önizlemesinin içeriğinin tam olarak nasıl görüntüleneceğini tanımlamanıza olanak tanıyan yeni bir özelliktir.
PreviewWrapperProvider arabirimini uygulayarak ve yeni @PreviewWrapper ek açıklamasını kullanarak belirli bir Theme uygulama gibi özel mantığı kolayca yerleştirebilirsiniz. Açıklama, @Composable ve @Preview veya @MultiPreview ile açıklama eklenmiş bir işleve uygulanabilir. Bu sayede, önizleme özelliklerinde çalışan ve tekrarlanan kodu önemli ölçüde azaltan genel ve kullanımı kolay bir çözüm sunulur.
class ThemeWrapper: PreviewWrapper {
@Composable
override fun Wrap(content: @Composable (() -> Unit)) {
JetsnackTheme {
content()
}
}
}
@PreviewWrapperProvider(ThemeWrapper::class)
@Preview
@Composable
private fun ButtonPreview() {
// JetsnackTheme in effect
Button(onClick = {}) {
Text(text = "Demo")
}
}
Kullanımdan kaldırmalar
-
Compose 1.10 blog yayınında duyurulduğu gibi,
Modifier.onFirstVisible()desteğini sonlandırıyoruz. Adı, özellikle kaydırma sırasında birden çok kez tetiklendiği tembel düzenlerde sıklıkla yanlış anlaşılmalara yol açıyordu. Görünürlük durumlarının, belirli kullanım alanı gereksinimlerinize göre daha hassas bir şekilde manuel olarak izlenmesine olanak tanıyanModifier.onVisibilityChanged()'ye geçmenizi öneririz. -
TextFieldsiçin D-pad ile gezinme özelliği artık varsayılan olarak her zaman etkin olduğu içinComposeFoundationFlags.isTextFieldDpadNavigationEnabledişareti kaldırıldı. Yeni davranış, oyun kumandası veya TV kumandasındaki D-pad etkinliklerinin önce imleci belirtilen yöne taşımasını sağlar. Odak, yalnızca imleç metnin sonuna ulaştığında başka bir öğeye taşınabilir.
Yakında kullanıma sunulacak API'ler
Yaklaşan Compose 1.12.0 sürümünde compileSdk, compileSdk 37 sürümüne yükseltilecek. AGP 9 ve Compose'a bağlı tüm uygulamalar ve kitaplıklar bu şartı devralacak. Compose, en yeni Android özelliklerine erişim sağlamak için yeni compileSdks'ları hızlı bir şekilde kullanmayı hedeflediğinden, yayınlanan en son sürümleri takip etmenizi öneririz. Farklı API düzeyleri için hangi AGP sürümünün desteklendiği hakkında daha fazla bilgi edinmek için buradaki dokümanlara göz atın.
Compose 1.11.0'da aşağıdaki API'ler @Experimental olarak kullanıma sunulmuştur. Uygulamalarınızda bu API'leri keşfederken geri bildirimlerinizi bekliyoruz. @Experimental APIs, erken değerlendirme ve geri bildirim için sunulur ve gelecekteki sürümlerde önemli değişikliklere uğrayabilir veya kaldırılabilir.
Stiller (deneysel)
Stil için yeni bir deneysel temel API sunuyoruz. Style API, bileşenlerin görsel öğelerini özelleştirmek için kullanılan yeni bir yöntemdir. Bu işlem, geleneksel olarak değiştiricilerle yapılırdı. Bu kitaplık, basit duruma dayalı stil ve animasyonlu geçişlerle stil verilebilen standart bir özellikler grubu sunarak daha derin ve kolay özelleştirme imkanı sunmak için tasarlanmıştır. Bu yeni API ile şimdiden umut verici performans avantajları elde ediyoruz. Style API kararlı hale geldiğinde Material bileşenlerinde Stiller'i kullanmayı planlıyoruz.
Basılı durum stilinin arka planını geçersiz kılma ile ilgili temel bir örnek:
@Composable fun LoginButton(modifier: Modifier = Modifier) { Button( onClick = { // Login logic }, modifier = modifier, style = { background( Brush.linearGradient( listOf(lightPurple, lightBlue) ) ) width(75.dp) height(50.dp) textAlign(TextAlign.Center) externalPadding(16.dp) pressed { background( Brush.linearGradient( listOf(Color.Magenta, Color.Red) ) ) } } ){ Text( text = "Login", ) } }
Belgelere göz atın ve hataları buradan bildirin.
MediaQuery (Deneysel)
Yeni mediaQuery API, kullanıcı arayüzünüzü ortamına uyarlamak için bildirim temelli ve yüksek performanslı bir yol sunar. Karmaşık bilgi almayı UiMediaScope içindeki basit koşullara indirgeyerek yalnızca gerektiğinde yeniden oluşturma yapılmasını sağlar.
Klavye türleri ve işaretçi hassasiyeti gibi cihaz özelliklerinden pencere boyutu ve duruş gibi bağlamsal durumlara kadar çok çeşitli ortam sinyalleri desteği sayesinde son derece duyarlı deneyimler oluşturabilirsiniz. Yüksek sıklıkta güncellemeleri işlemek için derivedMediaQuery ile performans yerleşiktir. Kapsamları geçersiz kılma özelliği sayesinde, donanım yapılandırmaları arasında test ve önizleme sorunsuz bir şekilde yapılabilir. Daha önce, bir cihazın masaüstü modunda olup olmadığı gibi belirli cihaz özelliklerine erişmek için çok fazla şablon kodu yazmanız gerekiyordu:
@Composable fun isTabletopPosture( context: Context = LocalContext.current ): Boolean { val windowLayoutInfo by WindowInfoTracker .getOrCreate(context) .windowLayoutInfo(context) .collectAsStateWithLifecycle(null) return windowLayoutInfo.displayFeatures.any { displayFeature -> displayFeature is FoldingFeature && displayFeature.state == FoldingFeature.State.HALF_OPENED && displayFeature.orientation == FoldingFeature.Orientation.HORIZONTAL } } @Composable fun VideoPlayer() { if(isTabletopPosture()) { TabletopLayout() } else { FlatLayout() } }
Artık UIMediaQuery ile cihazın masaüstü modunda olup olmadığı gibi cihaz özelliklerini sorgulamak için mediaQuery söz dizimini ekleyebilirsiniz:
@OptIn(ExperimentalMediaQueryApi::class)
@Composable
fun VideoPlayer() {
if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) {
TabletopLayout()
} else {
FlatLayout()
}
}
Belgelere göz atın ve hataları buradan bildirin.
Izgara (Deneysel)
Grid, Jetpack Compose'da karmaşık, iki boyutlu düzenler oluşturmak için kullanılan güçlü bir yeni API'dir. Row ve Column doğrusal tasarımlar için ideal olsa da Grid, kaydırılabilir liste ek yükü olmadan ekran düzeyinde mimari ve karmaşık bileşenler için gereken yapısal kontrolü sağlar. Grid, düzeninizi parçalar, boşluklar ve hücreler kullanarak tanımlamanıza olanak tanır. Bu sayede Dp, yüzdeler, doğal içerik boyutları ve esnek "Fr" birimleri gibi tanıdık boyutlandırma seçenekleri sunar.
@OptIn(ExperimentalGridApi::class) @Composable fun GridExample() { Grid( config = { repeat(4) { column(0.25f) } repeat(2) { row(0.5f) } gap(16.dp) } ) { Card1(modifier = Modifier.gridItem(rowSpan = 2) Card2(modifier = Modifier.gridItem(colmnSpan = 3) Card3(modifier = Modifier.gridItem(columnSpan = 2) Card4() } }
Öğeleri otomatik olarak yerleştirebilir veya hassasiyet için birden fazla satır ve sütuna yayabilirsiniz. En önemlisi, bu düzen son derece uyarlanabilir. Izgara parçalarınızı ve aralıklarınızı, masaüstü modu veya yön değişiklikleri gibi cihaz durumlarına yanıt verecek şekilde dinamik olarak yeniden yapılandırabilirsiniz. Böylece kullanıcı arayüzünüz tüm form faktörlerinde harika görünür.
Belgelere göz atın ve hataları buradan bildirin.
FlexBox (Deneysel)
FlexBox, yüksek performanslı ve uyarlanabilir kullanıcı arayüzleri için tasarlanmış bir düzen kapsayıcısıdır. Mevcut konteyner boyutlarına göre öğe boyutlandırmasını ve alan dağıtımını yönetir. Öğeleri sarmalama (wrap) ve çok eksenli hizalama (justifyContent, alignItems, alignContent) gibi karmaşık görevleri yerine getirir. Öğelerin, kapsayıcıyı doldurmak için büyümesine (grow) veya küçülmesine (shrink) olanak tanır.
@OptIn(ExperimentalFlexBoxApi::class) fun FlexBoxWrapping(){ FlexBox( config = { wrap(FlexWrap.Wrap) gap(8.dp) } ) { RedRoundedBox() BlueRoundedBox() GreenRoundedBox(modifier = Modifier.width(350.dp).flex { grow(1.0f) }) OrangeRoundedBox(modifier = Modifier.width(200.dp).flex { grow(0.7f) }) PinkRoundedBox(modifier = Modifier.width(200.dp).flex { grow(0.3f) }) } }
Belgelere göz atın ve hataları buradan bildirin.
Yeni SlotTable uygulaması (deneysel)
Bu sürümde varsayılan olarak devre dışı bırakılan SlotTable için yeni bir uygulama kullanıma sunduk. SlotTable, Compose çalışma zamanının kompozisyon hiyerarşinizin durumunu izlemek, geçersiz kılmaları/yeniden oluşturmaları izlemek, hatırlanan değerleri depolamak ve çalışma zamanında kompozisyonun tüm meta verilerini izlemek için kullandığı dahili veri yapısıdır. Bu yeni uygulama, öncelikle rastgele düzenlemelerle ilgili olarak performansı artırmak için tasarlanmıştır.
Yeni SlotTable özelliğini denemek için ComposeRuntimeFlags.isLinkBufferComposerEnabled'ı etkinleştirin.
Hemen kodlamaya başlayın.
Jetpack Compose'da çok sayıda heyecan verici yeni API ve yakında kullanıma sunulacak daha birçok API ile Jetpack Compose'a geçmek için daha iyi bir zaman olamaz. Her zaman olduğu gibi geri bildirimlerinize ve özellik isteklerinize (özellikle henüz geliştirme aşamasında olan @Experimental özellikleriyle ilgili) değer veriyoruz. Lütfen bunları buradan gönderin. Keyifli besteler!
Okumaya devam edin
-
Ürün Haberleri
Android Studio Panda 4 artık kararlı ve üretimde kullanıma hazır. Bu sürümde Planlama Modu, Sonraki Düzenleme Tahmini ve daha fazlası kullanıma sunuluyor. Böylece yüksek kaliteli Android uygulamaları oluşturmak hiç olmadığı kadar kolaylaşıyor.
Matt Dyor • Okuma süresi: 5 dakika
-
Ürün Haberleri
Uygulamanıza yenilikçi yapay zeka özellikleri eklemek isteyen bir Android geliştiriciyseniz kısa süre önce güçlü yeni güncellemeler yayınladık.
Thomas Ezan • Okuma süresi: 3 dk.
-
Ürün Haberleri
Android 17, bu sürüm döngüsünün planlanan son beta sürümü olan beta 4'e ulaştı. Bu, uygulama uyumluluğu ve platform kararlılığı açısından kritik bir dönüm noktasıdır.
Daniel Galpin • Okuma süresi: 4 dakika
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.