Ürün Haberleri

Android cihazlar, bağlı ekranlara sorunsuz bir şekilde genişletilir

Okuma süresi: 7 dk.
Francesco Romano'nun profilini görüntüle
Francesco Romano Geliştirici İlişkileri Mühendisi, Android

Android'de mobil ve masaüstü bilişimi birbirine yaklaştırma konusunda önemli bir kilometre taşını duyurmaktan heyecan duyuyoruz: Bağlı ekran desteği, Android 16 QPR3 sürümüyle genel kullanıma sunuldu.

Google I/O 2025'te gösterildiği gibi, bağlı ekranlar kullanıcıların Android cihazlarını harici bir monitöre bağlamasına ve masaüstü pencereleme ortamına anında erişmesine olanak tanır. Uygulamalar serbest biçimli veya ekranı kaplayan pencerelerde kullanılabilir ve kullanıcılar masaüstü işletim sisteminde olduğu gibi çoklu görev yapabilir.

Google ve Samsung, Android 16 çalıştıran ve harici bir ekrana bağlı olan Android ekosistemindeki cihazlara sorunsuz ve güçlü bir pencereli görüntüleme deneyimi sunmak için işbirliği yaptı. 
Bu özellik artık desteklenen cihazlarda* genel kullanıma sunuldu. Desteklenen Pixel ve Samsung telefonlarını harici monitörlere bağlayabilen kullanıcılar, farklı form faktörlerine uyum sağlayan daha ilgi çekici ve daha üretken uygulama deneyimleri oluşturmak için yeni fırsatlardan yararlanabilir.

İşleyiş şekli

Desteklenen bir Android telefon veya katlanabilir cihaz harici bir ekrana bağlandığında, bağlı ekranda yeni bir masaüstü oturumu başlatılır.

Bağlı ekrandaki deneyim, masaüstündeki deneyime benzer. Etkin uygulamaları gösteren ve kullanıcıların hızlı erişim için uygulamaları sabitlemesine olanak tanıyan bir görev çubuğu da buna dahildir. Kullanıcılar, bağlı ekranda serbestçe yeniden boyutlandırılabilen pencerelerde aynı anda birden fazla uygulamayı yan yana çalıştırabilir.

materialDisplay.gif

Telefon, harici bir ekrana bağlıyken kendi durumunu korur ve ekranda masaüstü oturumu gösterilir.

Pencereli görüntülemeyi destekleyen bir cihaz (ör. Samsung Galaxy Tab S11 gibi bir tablet) harici bir ekrana bağlandığında masaüstü oturumu her iki ekrana da genişletilerek daha da geniş bir çalışma alanı sunar. Ardından iki ekran, tek bir sürekli sistem olarak çalışır. Böylece uygulama pencereleri, içerikler ve imleç ekranlar arasında serbestçe hareket edebilir.

materialDisplay2.gif

Harici ekrana bağlı tablet, masaüstü oturumunu her iki ekrana da genişletiyor.

Neden önemli?

Android 16 QPR3 sürümünde, bağlı ekran deneyimini tanımlayan pencereleme davranışlarını, görev çubuğu etkileşimlerini ve giriş uyumluluğunu (fare ve klavye) tamamladık. Ayrıca, pencereleri ölçeklendirmek ve ekranlar arasında geçiş yaparken uygulamaların yeniden başlatılmasını önlemek için uyumluluk çözümleri de ekledik.


Uygulamanız uyarlanabilir tasarım ilkeleri kullanılarak geliştirildiyse otomatik olarak masaüstü görünümüne ve tarzına sahip olur. Böylece kullanıcılar uygulamayı kolayca kullanabilir. Uygulama dikey modda kilitliyse veya yalnızca dokunmatik bir arayüz kullanıyorsa artık modernleştirme zamanı gelmiştir.

Bağlı ekranlarda en iyi uygulama deneyimleri için özellikle aşağıdaki temel en iyi uygulamalara dikkat edin:

  • Sabit bir Display nesnesi olduğunu varsaymayın: Uygulama penceresi harici bir ekrana taşındığında veya ekran yapılandırması değiştiğinde uygulamanızın bağlamıyla ilişkili Display nesnesi değişebilir. Uygulamanız, yapılandırma değişikliği etkinliklerini sorunsuz bir şekilde işlemeli ve ekran metriklerini önbelleğe almak yerine dinamik olarak sorgulamalıdır.
  • Yoğunluk yapılandırması değişikliklerini hesaba katın: Harici ekranlar, birincil cihaz ekranından çok farklı piksel yoğunluklarına sahip olabilir. Kullanıcı arayüzünün netliğini ve kullanılabilirliğini korumak için düzenlerinizin ve kaynaklarınızın bu değişikliklere doğru şekilde uyum sağladığından emin olun. Düzenler için yoğunluktan bağımsız pikseller (dp) kullanın, yoğunluğa özel kaynaklar sağlayın ve kullanıcı arayüzünüzün uygun şekilde ölçeklendiğinden emin olun.
  • Harici çevre birimlerini doğru şekilde destekleyin: Kullanıcılar harici bir monitöre bağlandıklarında genellikle masaüstüne benzer bir ortam oluştururlar. Bu genellikle harici klavye, fare, dokunmatik yüzey, web kamerası, mikrofon ve hoparlör kullanımını içerir. Klavye ve fare etkileşimleri için desteği iyileştirin.

Modern araçlarla masaüstünün geleceğini inşa etme

Masaüstü deneyimini oluşturmanıza yardımcı olacak çeşitli araçlar sunuyoruz. Temel uyarlanabilir kitaplıklarımızda yapılan son güncellemeleri özetleyelim.

Yeni pencere boyutu sınıfları: Büyük ve Çok büyük

Jetpack WindowManager 1.5.0'daki en büyük güncelleme, iki yeni genişlik pencere boyutu sınıfının eklenmesidir: Büyük ve Çok büyük.

Pencere boyutu sınıfları, uyarlanabilir düzenler tasarlayıp geliştirmenize yardımcı olan resmi ve özel görüntü alanı kesme noktaları grubumuzdur. 1.5.0 sürümüyle birlikte, bu kılavuzu tipik tablet boyutundan daha büyük ekranları kapsayacak şekilde genişletiyoruz.

Yeni genişlik kesme noktaları şunlardır:

  • Büyük: 1.200 dp ile 1.600 dp arasındaki genişlikler için
  • Çok büyük: ≥1600 dp genişlikler için
windowClasses.png

Ekran genişliğine göre farklı pencere boyutu sınıfları.

Çok büyük yüzeylerde, tabletin Genişletilmiş düzenini ölçeklendirmek her zaman en iyi kullanıcı deneyimini sunmaz. Örneğin, bir e-posta istemcisi, Genişletilmiş pencere boyutu sınıfında iki bölmeyi (posta kutusu ve mesaj) rahatça gösterebilir. Ancak çok büyük bir masaüstü monitörde e-posta istemcisi üç, hatta dört bölmeyi (ör. posta kutusu, ileti listesi, tam ileti içeriği ve takvim/görevler paneli) aynı anda şık bir şekilde gösterebilir.

Yeni pencere boyutu sınıflarını projenize dahil etmek için işlevi WindowSizeClass.BREAKPOINTS_V1 yerine WindowSizeClass.BREAKPOINTS_V2 grubundan çağırmanız yeterlidir:

val currentWindowMetrics =
    WindowMetricsCalculator.getOrCreate()
    .computeCurrentWindowMetrics(LocalContext.current)

val sizeClass = WindowSizeClass.BREAKPOINTS_V2
    .computeWindowSizeClass(currentWindowMetrics)

Ardından, uygulamanızın en az bu kadar alana sahip olduğundan emin olduktan sonra doğru düzeni uygulayın:

if(sizeClass.isWidthAtLeastBreakpoint(
    WindowSizeClass.WIDTH_DP_LARGE_LOWER_BOUND)){
    ...
	// Window is at least 1200 dp wide.
}

Jetpack Navigation 3 ile uyarlanabilir düzenler oluşturma

Navigation 3, Jetpack koleksiyonuna eklenen en yeni bileşendir. İlk kararlı sürümü kısa süre önce yayınlanan Navigation 3, Compose ile çalışmak üzere tasarlanmış güçlü bir gezinme kitaplığıdır.

Navigation 3, aynı anda birden fazla hedefin görüntülenmesine ve bu düzenler arasında sorunsuz geçiş yapılmasına olanak tanıyarak uyarlanabilir düzenler oluşturmak için de mükemmel bir araçtır.

Uygulamanızın kullanıcı arayüzü akışını yöneten bu sistem, sahneleri temel alır. Sahne, aynı anda bir veya daha fazla hedefi gösteren bir düzendir. SceneStrategy, bir sahne oluşturup oluşturamayacağını belirler. SceneStrategy örneklerini birbirine bağlayarak farklı ekran boyutları ve cihaz yapılandırmaları için farklı sahneler oluşturup görüntüleyebilirsiniz.

Liste-ayrıntı düzeni ve destekleyici bölme gibi kullanıma hazır standart düzenler için Compose Material 3 Adaptive kitaplığındaki sahneleri kullanabilirsiniz (1.3 ve sonraki sürümlerde kullanılabilir).

Sahne tariflerini değiştirerek veya sıfırdan başlayarak kendi özel sahnelerinizi de kolayca oluşturabilirsiniz. Örneğin, yan yana üç bölme gösteren bir sahneyi ele alalım:

class ThreePaneScene<T : Any>(
    override val key: Any,
    override val previousEntries: List<NavEntry<T>>,
    val firstEntry: NavEntry<T>,
    val secondEntry: NavEntry<T>,
    val thirdEntry: NavEntry<T>
) : Scene<T> {
    override val entries: List<NavEntry<T>> = listOf(firstEntry, secondEntry, thirdEntry)
    override val content: @Composable (() -> Unit) = {
        Row(modifier = Modifier.fillMaxSize()) {
            Column(modifier = Modifier.weight(1f)) {
                firstEntry.Content()
            }
            Column(modifier = Modifier.weight(1f)) {
                secondEntry.Content()
            }
            Column(modifier = Modifier.weight(1f)) {
                thirdEntry.Content()
            }
        }
    }

Bu senaryoda, pencere genişliği yeterliyse ve eski yığınınızdaki girişler üç bölmeli bir sahnede gösterilmeyi desteklediğini beyan etmişse üç bölme gösterecek bir SceneStrategy tanımlayabilirsiniz.

class ThreePaneSceneStrategy<T : Any>(val windowSizeClass: WindowSizeClass) : SceneStrategy<T> {
    override fun SceneStrategyScope<T>.calculateScene(entries: List<NavEntry<T>>): Scene<T>? {
        if (windowSizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_LARGE_LOWER_BOUND)) {
            val lastThree = entries.takeLast(3)
            if (lastThree.size == 3 && lastThree.all { it.metadata.containsKey(MULTI_PANE_KEY) }) {
                val firstEntry = lastThree[0]
                val secondEntry = lastThree[1]
                val thirdEntry = lastThree[2]


                return ThreePaneScene(
                    key = Triple(firstEntry.contentKey, secondEntry.contentKey, thirdEntry.contentKey),
                    previousEntries = entries.dropLast(3),
                    firstEntry = firstEntry,
                    secondEntry = secondEntry,
                    thirdEntry = thirdEntry
                )
            }
        }
        return null
    }
}

NavDisplay'inizi oluştururken ThreePaneSceneStrategy'nizi diğer stratejilerle birlikte kullanabilirsiniz. Örneğin, üç bölme göstermek için yeterli alan olmadığında iki bölmeyi yan yana görüntülemek için TwoPaneStrategy de ekleyebiliriz.

val strategy = ThreePaneSceneStrategy() then TwoPaneSceneStrategy()

NavDisplay(..., 
  sceneStrategy = strategy,
  entryProvider = entryProvider { 
    entry<MyScreen>(metadata = mapOf(MULTI_PANE_KEY to true))) { ... }
    ... other entries...
  }
)

Üç veya iki bölme görüntülemek için yeterli alan yoksa özel sahne stratejilerimizin her ikisi de null değerini döndürür. Bu durumda NavDisplay, SinglePaneScene kullanarak eski yığındaki son girişi tek bir bölmede görüntülemeye geri döner.

Sahneleri ve stratejileri kullanarak uygulamanıza bir, iki ve üç bölmeli düzenler ekleyebilirsiniz.

adaptivepane.gif

Geniş ekranlarda üç bölmeli gezinme gösteren uyarlanabilir bir uygulama.

Navigation 3'te sahneleri kullanarak özel düzenler oluşturma hakkında daha fazla bilgi edinmek için belgelere göz atın.

Bağımsız uyarlanabilir düzenler

Bağımsız bir düzene ihtiyacınız varsa Compose Material 3 Adaptive kitaplığı, pencere boyutu sınıflarına veya cihaz duruşlarına göre pencere yapılandırmalarına otomatik olarak uyum sağlayan liste-ayrıntı düzeni ve destekleyici bölme düzenleri gibi uyarlanabilir kullanıcı arayüzleri oluşturmanıza yardımcı olur. 

İyi haber şu ki kitaplık, yeni kesme noktalarıyla zaten güncel. 1.2 sürümünden itibaren, varsayılan bölme iskele yönergesi işlevleri, büyük ve ekstra büyük genişlikteki pencere boyutu sınıflarını destekler.

Gradle derleme dosyanızda yeni kesme noktalarını kullanmak istediğinizi beyan ederek etkinleştirmeniz yeterlidir:

currentWindowAdaptiveInfo(supportLargeAndXLargeWidth = true)

Başlarken

En son Android sürümündeki bağlı ekran özelliğini keşfedin. Desteklenen bir cihazda Android 16 QPR3'ü edinin ve uygulamanızı test etmeye başlamak için cihazı harici bir monitöre bağlayın.

Bu en iyi uygulamaları hayata geçirme hakkında daha fazla bilgi edinmek için çoklu ekran desteği ve pencere yönetimi ile ilgili güncellenmiş belgelere göz atın.

Geri bildirim

Bağlı ekran masaüstü deneyimini iyileştirmeye devam ederken geri bildirimleriniz bizim için çok önemlidir. Resmi geri bildirim kanallarımız üzerinden görüşlerinizi paylaşabilir ve sorunları bildirebilirsiniz.

Android'i, kullanıcıların uygulamaları ve cihazlarıyla etkileşim kurmak istediği birçok yönteme uyum sağlayan çok yönlü bir platform haline getirmeye kararlıyız. Bağlı ekran desteğinde yapılan iyileştirmeler bu yönde atılan bir diğer adımdır. Kullanıcılarınızın, oluşturacağınız masaüstü deneyimlerini beğeneceğini düşünüyoruz.


*Not: Bu makalenin yazıldığı tarih itibarıyla bağlı ekranlar Pixel 8, 9, 10 serisinde ve S26, Fold7, Flip7 ve Tab S11 dahil olmak üzere çok çeşitli Samsung cihazlarda desteklenmektedir.

Yazan:
Okumaya devam et