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şlemesini inceleyin), 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 birkaç deneysel API'miz 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
Oluşturma özelliğinin test zamanlamasını ele alma şekliyle ilgili önemli bir güncelleme yapıyoruz. 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'lerinin desteği sonlandı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 öğesini kullanırken v2 API'leri StandardTestDispatcher öğesini kullanır. Bu, testlerinizde bir coroutine başlatıldığında artık sıraya alındığı ve sanal saat ilerletilene kadar yürütülmediği anlamına gelir.
Bu, üretim koşullarını daha iyi taklit ederek yarış koşullarını etkili bir şekilde temizler 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ı taşıma 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 ne olduğunu görebilirsiniz. Bu sayede, bir geçişin neden beklendiği gibi davranmadığını tespit etmek çok daha kolay hale gelir. Yeni aracı kullanmak için SharedTransitionLayout'unuzu LookaheadAnimationVisualDebugging composable ile çevrelemeniz 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. Daha önce bu trackpad etkinlikleri PointerType.Touch'nın sahte dokunmatik ekran parmakları olarak yorumlanıyordu ve bu durum 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, dokunma yüzeyiyle 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 seçimi ve metin alanlarında masaüstü tarzı bağlam menüleri ile 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ı)
Barındırıcı düzeyindeki hizmetleri doğrudan compose-runtime üzerinden sağlamak 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.
Sarmalayıcıları önizleme
Android Studio özel önizlemeleri, Compose önizlemesinin içeriklerinin 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ırma ve kaldırma
- 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 şekilde manuel olarak izlenmesine olanak tanıyanModifier.onVisibilityChanged()'ye geçmenizi öneririz. TextFieldsartık varsayılan olarak her zaman etkin olduğundanComposeFoundationFlags.isTextFieldDpadNavigationEnabledbayrağı kaldırıldı. Yeni davranış, oyun kumandası veya TV kumandasından gelen D-pad etkinliklerinin önce imleci belirtilen yönde 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 ile 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 kullanmanızı ö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ümanları inceleyin.
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ı. Basit duruma dayalı stil ve animasyonlu geçişlerle standart bir stil verilebilir ö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 stilleri kullanmayı planlıyoruz.
Basılı durum stili 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", ) } }
Belgeleri inceleyin 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 sinyallerini destekleyerek 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, belirli cihaz özelliklerine (ör. cihazın masaüstü modunda olup olmadığı) erişmek için çok fazla standart kod 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 özelliklerini (ör. cihazın masaüstü modunda olup olmadığı) sorgulamak için mediaQuery söz dizimini ekleyebilirsiniz:
@OptIn(ExperimentalMediaQueryApi::class) @Composable fun VideoPlayer() { if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) { TabletopLayout() } else { FlatLayout() } }
Belgeleri inceleyin 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ı, 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. Öğelerin sarmalanması (wrap) ve çok eksenli hizalanması (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) }) } }
Belgeleri inceleyin 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 beste hiyerarşinizin durumunu izlemek, geçersiz kılmaları/yeniden oluşturmaları takip etmek, hatırlanan değerleri depolamak ve çalışma zamanında besteye ait tüm meta verileri izlemek için kullandığı dahili veri yapısıdır. Bu yeni uygulama, performansı (özellikle rastgele düzenlemelerle ilgili) 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çiş 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. İyi yazmalar!
-
Ürün HaberleriGoogle Play'de, büyümenizi sağlamanıza, yeni iş modellerine uyum sağlamanıza ve kullanıcılarınıza tam olarak bulundukları yerde ulaşmanıza yardımcı olmak için abonelik platformumuzu sürekli olarak genişletiyoruz.
Sheenam Mittal • Okuma süresi: 4 dakika -
Ürün HaberleriGeçen yıl Android Studio, tüm yapay zeka modellerine açıldı. Bugün, kodlama aracınızı seçme desteğini sunarak bir sonraki adımı atıyoruz.
Matthew Warner • Okuma süresi: 3 dk. -
Ü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
Android geliştirmeyle ilgili en son analizleri haftalık olarak gelen kutunuza alın.