Jetpack Compose Nisan 2026 sürümü bugün 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 kayıt döneminin ardından v2 test API'leri artık varsayılan olarak ayarlanmış durumda 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'yi 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 sayede üretim koşulları daha iyi taklit edilir, yarış koşulları etkili bir şekilde temizlenir ve test paketi önemli ölçüde daha sağlam ve daha az kararsız hale gelir.
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ı 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 yapar. 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 boşluğunun 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ü tarzı bağlam menüleri gibi özelliklerle yerleşik bileşenlerdeki izleme panellerinin davranışını iyileştirir.
Dokunmatik yüzey davranışını test etmek için performTrackpadInput, ile yeni test API'leri vardır. Bu API'ler, uygulamalarınızın dokunmatik yüzeyle kullanıldığında nasıl davrandığı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 arayüzünü uygulayıp yeni @PreviewWrapper ek açıklamasını kullanarak belirli bir Theme uygulama gibi özel mantığı kolayca ekleyebilirsiniz. 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: PreviewWrapperProvider { @Composable override fun Wrap(content: @Composable (() -> Unit)) { JetsnackTheme { content() } } } @PreviewWrapper(ThemeWrapper::class) @Preview @Composable private fun ButtonPreview() { // JetsnackTheme in effect Button(onClick = {}) { Text(text = "Demo") } }
Desteği sonlandırılan ve kaldırılan özellikler
- 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.isTextFieldDpadNavigationEnabledbayrağı kaldırıldı. Yeni davranış, oyun kumandası veya TV kumandasındaki D-pad etkinliklerinin önce imleci belirtilen yöne hareket ettirmesini 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ılmaya dair 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 mediaQuery söz dizimini kullanarak cihaz özelliklerini (ör. cihazın masaüstü modunda olup olmadığı) sorgulayabilirsiniz:
@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 açıkça 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ı takip etmek, 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 bildirimlerinizi ve özellik isteklerinizi (özellikle henüz geliştirme aşamasında olan @Experimental özellikleriyle ilgili) önemsiyoruz. Lütfen bunları buradan gönderin. Keyifli besteler!
-
Ürün HaberleriGoogle Play olarak, geliştiricilerin başarıya ulaşmak için gerekli araçlara ve uyum yeteneğine sahip olmasını sağlarken kullanıcılara da mümkün olan en iyi deneyimi sunmaya kararlıyız.
Paul Feng • Okuma süresi 3 dakika -
Ürün HaberleriGeçen yıl, ekosistem güvenliğini güçlendirmek ve kötü niyetli kişilerin zararlı uygulamalar yayınlamak için anonimliğin arkasına saklanmasını önlemek amacıyla Android geliştirici doğrulamasını kullanıma sunduk.
Matthew Forsythe • Okuma süresi 2 dakika -
Ürün HaberleriArtırılmış yer paylaşımlarından tamamen etkileyici ortamlara kadar Android XR ekosistemi hızla genişliyor. Samsung Galaxy XR ise bugün itibarıyla kullanıma sunuldu.
Stevan Silva, Vinny DaSilva • Okuma süresi 3 dakika
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.