Çoklu pencere modunu destekleme

Çoklu pencere modu, birden fazla uygulamanın aynı ekranı aynı anda paylaşmasına olanak tanır. Uygulamalar yan yana veya üst üste (bölünmüş ekran modu), diğer uygulamaların üzerinde küçük bir pencerede (pencere içinde pencere modu) ya da ayrı taşınabilir ve yeniden boyutlandırılabilir pencerelerde (masaüstü pencere modu) olabilir.

Şekil 1. Bölünmüş ekran modunda iki uygulamayı yan yana görüntüleyin.

Telefonlarda bölünmüş ekran moduna erişmeyle ilgili kullanıcı talimatları için Pixel telefonda aynı anda iki uygulamayı görme başlıklı makaleye gidin.

Sürüme özel çoklu pencere özellikleri

Çoklu pencere kullanıcı deneyimi, Android sürümüne ve cihaz türüne bağlıdır:

  • Android 7.0 (API düzeyi 24), küçük ekranlı cihazlarda bölünmüş ekran modunu ve belirli cihazlarda resim içinde resim modunu kullanıma sundu.

    • Bölünmüş ekran modu, ekranı iki uygulamayla doldurarak bunları yan yana veya üst üste gösterir. Kullanıcılar, iki uygulamayı ayıran ayırıcıyı sürükleyerek bir uygulamayı büyütüp diğerini küçültebilir.

    • Pencere içinde pencere modu, kullanıcıların başka bir uygulamayla etkileşimde bulunurken video oynatmaya devam etmesini sağlar (bkz. Pencere içinde pencere desteği).

    • Kullanıcıların her etkinliği serbestçe yeniden boyutlandırabildiği masaüstü pencere modu, büyük ekranlı cihazların üreticileri tarafından etkinleştirilebilir.

      Etkinliğinizin izin verilen minimum boyutlarını belirterek uygulamanızın çok pencereli modu nasıl işleyeceğini yapılandırabilirsiniz. Sistemin uygulamanızı her zaman tam ekran göstermesini sağlamak için resizeableActivity="false" ayarını yaparak uygulamanızda çoklu pencere modunu da devre dışı bırakabilirsiniz.

  • Android 8.0 (API düzeyi 26), resim içinde resim modunu küçük ekranlı cihazlara da getiriyor.

  • Android 12 (API düzeyi 31), çok pencereli modu standart davranış haline getiriyor.

    • Büyük ekranlarda (orta veya genişletilmiş pencere boyutu sınıfı), platform, uygulama yapılandırmasından bağımsız olarak çok pencereli moddaki tüm uygulamaları destekler. resizeableActivity="false" ise uygulama, ekran boyutlarına uyum sağlamak için gerektiğinde uyumluluk moduna alınır.

    • Küçük ekranlarda (compact pencere boyutu sınıfı), sistem bir etkinliğin minWidth ve minHeight özelliklerini kontrol ederek etkinliğin çok pencereli modda çalışıp çalışamayacağını belirler. Bu durumda resizeableActivity="false", uygulama minimum genişlik ve yükseklik değerlerinden bağımsız olarak çoklu pencere modunda çalışamaz.

  • Android 16 (API düzeyi 36), ekran yönü, en-boy oranı ve yeniden boyutlandırılabilirlik kısıtlamalarını geçersiz kılar.

    • Büyük ekranlarda (en küçük genişlik >= 600 dp) sistem, uygulamanın yönünü, en boy oranını ve yeniden boyutlandırılabilirliğini kısıtlamak için kullanılan manifest özelliklerini ve çalışma zamanı API'lerini yoksayar. Böylece, tüm cihaz form faktörlerinde kullanıcı deneyimi optimize edilir.

      Oyunları Android 16 değişikliklerinin dışında tutma hakkında bilgi edinmek için Uygulama yönü, en boy oranı ve yeniden boyutlandırılabilme istisnaları bölümüne bakın.

Uygulama stratejileri

Çoklu pencere modu çeşitli şekillerde başlatılabilir.

Kullanıcı tarafından başlatılan bölünmüş ekranı destekleme

  1. Son kullanılanlar ekranını açın.
  2. Bir uygulamayı görünür hale getirmek için kaydırma
  3. Uygulamanın başlık çubuğundaki uygulama simgesine basın.
  4. Bölünmüş ekran menü seçeneğini belirleyin.
  5. Son Kullanılanlar ekranından başka bir uygulama seçin.

Kullanıcılar, pencere ayırıcıyı ekranın kenarına (yukarı veya aşağı, sol ya da sağ) sürükleyerek bölünmüş ekran modundan çıkar.

Programatik bölünmüş ekran (yan yana başlatma)

Uygulamanızın bitişik bir pencerede başka bir etkinlik başlatması gerekiyorsa FLAG_ACTIVITY_LAUNCH_ADJACENT amaç işaretini kullanın. Android 12L (API düzeyi 32) ve sonraki sürümlerde bu işaret, tam ekran modunda çalışan bir uygulamanın bölünmüş ekran moduna girmesine ve hedef etkinliği bitişik pencerede başlatmasına olanak tanır. FLAG_ACTIVITY_LAUNCH_ADJACENT, Android 7.0'da (API düzeyi 24) kullanıma sunuldu.

Bitişik bir etkinliği başlatmak için FLAG_ACTIVITY_LAUNCH_ADJACENT ile FLAG_ACTIVITY_NEW_TASK'ı birlikte kullanın. Örneğin:

fun openUrlInAdjacentWindow(url: String) {
    Intent(Intent.ACTION_VIEW).apply { data = Uri.parse(url)
       addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT or Intent.FLAG_ACTIVITY_NEW_TASK)
    }.also { intent -> startActivity(intent) }
}

Etkinlik yerleştirme (aynı görevdeki etkinlikleri bölme)

Etkinlik yerleştirme, birden fazla etkinlikten oluşan uygulamaların, büyük ekranlardaki liste-ayrıntı düzeni gibi aynı uygulama görevi içindeki etkinlikleri bölmesine olanak tanır. Jetpack WindowManager'ın bir parçası olan etkinlik yerleştirme, etkinliklerin yan yana mı yoksa üst üste mi görüntüleneceğini belirleyen XML veya API çağrılarını kullanarak yapılandırma kuralları (ör. bölünmüş çift kuralları) tanımlamanıza olanak tanır. Ayrıntılı bilgi için Etkinlik yerleştirme başlıklı makaleyi inceleyin.

Çoklu pencere modunda etkinlik yaşam döngüsü

Çok pencereli mod, etkinlik yaşam döngüsünü değiştirmez. Ancak, birden fazla penceredeki uygulamaların devam ettirilen durumu, Android'in farklı sürümlerinde farklılık gösterir.

Çoklu özgeçmiş

Android 10 (API düzeyi 29) ve sonraki sürümlerde çoklu devam ettirme desteklenir. Cihaz çok pencereli moddayken tüm etkinlikler RESUMED durumunda kalır. Etkinliğin üzerinde şeffaf bir etkinlik varsa veya etkinlik odaklanılabilir değilse (ör. etkinlik pencere içinde pencere modundaysa) etkinlik duraklatılabilir. Ayrıca, örneğin bildirim çekmecesi açıksa belirli bir zamanda hiçbir etkinliğin odaklanmamış olması da mümkündür. onStop() Yöntem her zamanki gibi çalışır: Bir etkinlik ekrandan kaldırıldığında yöntem çağrılır.

Çoklu devam ettirme özelliği, Android 9 (API düzeyi 28) sürümünü çalıştıran belirli cihazlarda da kullanılabilir. Android 9 cihazlarda çoklu devam ettirme özelliğini etkinleştirmek için aşağıdaki manifest meta verilerini ekleyin:

<meta-data android:name="android.allow_multiple_resumed_activities" android:value="true" />

Belirli bir cihazın bu manifest meta verilerini desteklediğini doğrulamak için cihaz özelliklerine bakın.

Android 9

Android 9 (API düzeyi 28) ve önceki sürümlerdeki çok pencereli modda, belirli bir zamanda yalnızca kullanıcının en son etkileşimde bulunduğu etkinlik aktiftir. Bu etkinlik en üstteki etkinlik olarak kabul edilir ve RESUMED durumundaki tek etkinliktir. Diğer tüm görünür etkinlikler STARTED ancak RESUMED değildir. Ancak sistem, devam ettirilmeyen ancak görünür olan bu etkinliklere görünür olmayan etkinliklerden daha yüksek öncelik verir. Kullanıcı, görünür etkinliklerden biriyle etkileşime girerse bu etkinlik devam ettirilir ve daha önce en üstte olan etkinlik STARTED durumuna girer.

Tek bir etkin uygulama sürecinde birden fazla etkinlik olduğunda, en yüksek z-sırasına sahip etkinlik devam ettirilir ve diğerleri duraklatılır.

Yapılandırma değişiklikleri

Kullanıcı bir uygulamayı çok pencereli moda aldığında sistem, Yapılandırma değişikliklerini işleme bölümünde belirtildiği gibi yapılandırma değişikliği etkinliğini bildirir. Bu durum, kullanıcı uygulamayı yeniden boyutlandırdığında veya uygulamayı tekrar tam ekran moduna aldığında da gerçekleşir.

Temel olarak bu değişiklik, sistemin uygulamaya cihazın dikeyden yatay yönlendirmeye geçtiğini bildirmesiyle aynı etkinlik yaşam döngüsü etkilerine sahiptir. Ancak bu durumda yalnızca değiştirilmek yerine uygulama boyutları değiştirilir. Etkinliğiniz yapılandırma değişikliğini kendisi işleyebilir veya uygulamanız, sistemin etkinliği yok etmesine ve yeni boyutlarla yeniden oluşturmasına izin verebilir.

Kullanıcı bir pencereyi yeniden boyutlandırıp her iki boyutta da büyütürse sistem, etkinliği kullanıcı işlemine uyacak şekilde yeniden boyutlandırır ve gerektiğinde yapılandırma değişiklikleri yapar. Uygulama, yeni gösterilen alanları çizme konusunda gecikirse sistem, bu alanları geçici olarak windowBackground özelliği veya varsayılan windowBackgroundFallback stil özelliği tarafından belirtilen renkle doldurur.

Özel kaynaklara erişim

Çoklu devam ettirme özelliğini desteklemek için onTopResumedActivityChanged() yaşam döngüsü geri çağırmasını kullanın.

Geri çağırma, bir etkinlik en üstteki devam ettirilen etkinlik konumunu kazandığında veya kaybettiğinde çağrılır. Bu, bir etkinlik mikrofon veya kamera gibi paylaşılan tekil bir kaynak kullandığında önemlidir:

override fun onTopResumedActivityChanged(topResumed: Boolean) {
    if (topResumed) {
        // Top resumed activity.
        // Can be a signal to re-acquire exclusive resources.
    } else {
        // No longer the top resumed activity.
    }
}

Uygulamaların, paylaşılan bir donanım parçasının kaldırılması gibi başka nedenlerle de kaynak kaybedebileceğini unutmayın.

Her durumda, bir uygulama, kullanılabilir kaynakları etkileyen etkinlikleri ve durum değişikliklerini sorunsuz bir şekilde yönetmelidir.

Kamera kullanan uygulamalar için, CameraManager.AvailabilityCallback#onCameraAccessPrioritiesChanged() kameraya erişmeyi denemek için uygun bir zaman olabileceğine dair ipucu verir. Bu yöntem Android 10 (API düzeyi 29) sürümünden itibaren kullanılabilir.

Kamerayı kullanan diğer uygulamalar başka ekranlarda açılabileceğinden resizeableActivity=false simgesinin, kameraya özel erişim garantisi vermediğini unutmayın.

Şekil 2. Çoklu pencere modunda kamera

Uygulamanızın, odak kaybedildiğinde kamerayı serbest bırakması gerekmez. Örneğin, kullanıcı yeni odaklanmış en üstteki devam ettirilen uygulamayla etkileşimde bulunurken kamera önizlemesine devam etmek isteyebilirsiniz. Uygulamanızın, en üstteki devam ettirilen uygulama olmadığı zamanlarda kamerayı çalıştırmaya devam etmesi sorun değildir ancak bağlantı kesilmesi durumunu düzgün şekilde ele alması gerekir. En üstteki devam ettirilen uygulama kamerayı kullanmak istediğinde kamerayı açabilir ve uygulamanız erişimi kaybeder. Uygulamanız, odak noktası tekrar uygulamaya döndüğünde kamerayı yeniden açabilir.

Bir uygulama CameraDevice.StateCallback#onDisconnected() geri çağırması aldıktan sonra kamera cihazındaki sonraki aramalar CameraAccessException oluşturur.

Pencere metrikleri

Android 11 (API düzeyi 30), çoklu pencere modunda çalışan uygulamaların sınırlarını sağlamak için aşağıdaki WindowManager yöntemlerini kullanıma sundu:

Jetpack WindowManager kitaplığı yöntemleri computeCurrentWindowMetrics() ve computeMaximumWindowMetrics() sırasıyla benzer işlevler sunar ancak API düzeyi 14 ile geriye dönük uyumludur.

Mevcut ekran dışındaki ekranlara ait metrikleri almak için aşağıdakileri yapın (kod snippet'inde gösterildiği gibi):

  • Görüntüleme bağlamı oluşturma
  • Görüntü için pencere bağlamı oluşturma
  • Pencere bağlamının WindowManager
  • Uygulamanın kullanabileceği maksimum görüntüleme alanının WindowMetrics

val windowMetrics = context.createDisplayContext(display)
                           .createWindowContext(WindowManager.LayoutParams.TYPE_APPLICATION, null)
                           .getSystemService(WindowManager::class.java)
                           .maximumWindowMetrics

Kullanımdan kaldırılan yöntemler

Display yöntemleri getSize() ve getMetrics(), yeni WindowManager yöntemleri lehine API düzeyi 30'da desteği sonlandırıldı.

Android 12 (API düzeyi 31), Display yöntemlerinin getRealSize() ve getRealMetrics() desteğini sonlandırır ve davranışlarını getMaximumWindowMetrics() davranışıyla daha uyumlu olacak şekilde günceller.

Çoklu pencere modu yapılandırması

Uygulamanız Android 7.0'ı (API düzeyi 24) veya sonraki bir sürümü hedefliyorsa uygulamanızın etkinliklerinin çok pencereli modu nasıl ve destekleyip desteklemediğini yapılandırabilirsiniz. Hem boyutu hem de düzeni kontrol etmek için manifest dosyanızda özellikler ayarlayabilirsiniz. Bir kök etkinliğin özellik ayarları, görev yığınındaki tüm etkinlikler için geçerlidir. Örneğin, kök etkinlikte android:resizeableActivity="true" varsa görev yığınındaki tüm etkinlikler yeniden boyutlandırılabilir. Chromebook gibi bazı büyük cihazlarda, android:resizeableActivity="false" belirtmiş olsanız bile uygulamanız yeniden boyutlandırılabilir bir pencerede çalışabilir. Bu durum uygulamanızın çalışmasını engelliyorsa Google Play'deki filtreleri kullanarak uygulamanızın bu tür cihazlarda kullanılabilirliğini kısıtlayabilirsiniz.

Android 12'de (API düzeyi 31) varsayılan olarak çoklu pencere modu kullanılır. Büyük ekranlarda (orta veya genişletilmiş pencere boyutu sınıfı), uygulama yapılandırmasından bağımsız olarak tüm uygulamalar çok pencereli modda çalışır. Küçük ekranlarda sistem, etkinliğin çok pencereli modda çalışıp çalışamayacağını belirlemek için etkinliğin minWidth, minHeight ve resizeableActivity ayarlarını kontrol eder.

resizeableActivity

API düzeyi 30 ve daha düşük sürümlerde çok pencereli modu etkinleştirmek veya devre dışı bırakmak için bu özelliği manifest dosyanızın <activity> veya <application> öğesinde ayarlayın:

<application
  android:name=".MyActivity"
  android:resizeableActivity=["true" | "false"] />;

Bu özellik true olarak ayarlanırsa etkinlik, bölünmüş ekran ve masaüstü pencereli görüntüleme modlarında başlatılabilir. Özellik false olarak ayarlanırsa etkinlik çoklu pencere modunu desteklemez. Değer false ise ve kullanıcı etkinliği çok pencereli modda başlatmaya çalışırsa etkinlik tam ekranı kaplar.

Uygulamanız API düzeyi 24 veya sonraki sürümleri hedefliyorsa ancak bu özellik için bir değer belirtmezseniz özelliğin değeri varsayılan olarak doğru olur.

Uygulamanız API düzeyi 31 veya üstünü hedefliyorsa bu özellik, küçük ve büyük ekranlarda farklı şekilde çalışır:

  • Büyük ekranlar (orta veya genişletilmiş pencere boyutu sınıfı): Tüm uygulamalar çok pencereli modu destekler. Bu özellik, bir etkinliğin yeniden boyutlandırılıp boyutlandırılamayacağını gösterir. resizeableActivity="false" ise uygulama, ekran boyutlarına uyması gerektiğinde uyumluluk moduna alınır.
  • Küçük ekranlar (compact pencere boyutu sınıfı): Etkinlik minimum genişliği ve minimum yüksekliği çoklu pencere gereksinimleri dahilindeyse etkinlik, çoklu pencere modunu destekler.resizeableActivity="true" resizeableActivity="false" ise etkinlik, minimum genişlik ve yükseklik değerlerinden bağımsız olarak çok pencereli modu desteklemez.

Uygulamanız API düzeyi 36 veya sonraki sürümleri hedefliyorsa bu özellik, en küçük genişliği >= 600 dp olan ekranlarda yoksayılır. Ancak uygulama, kullanıcının seçtiği en boy oranına tamamen saygı gösterir (bkz. Kullanıcı tarafından uygulama başına geçersiz kılmalar).

Oyun geliştiriyorsanız Android 16 (API seviyesi 36) değişikliklerinin dışında tutmak için Uygulama yönü, en-boy oranı ve yeniden boyutlandırılabilirlik başlıklı makaleyi inceleyin.

supportsPictureInPicture

Etkinliğin resim içinde resim modunu destekleyip desteklemediğini belirtmek için bu özelliği manifestinizin <activity> düğümünde ayarlayın.

<activity
  android:name=".MyActivity"
  android:supportsPictureInPicture=["true" | "false"] />

configChanges

Kullanıcı pencereyi yeniden boyutlandırdığında olduğu gibi çoklu pencere yapılandırma değişikliklerini kendiniz işlemek için uygulama manifestinizdeki android:configChanges özelliğini en azından aşağıdaki değerlerle birlikte <activity> düğümüne ekleyin:

<activity
  android:name=".MyActivity"
  android:configChanges="screenSize | smallestScreenSize
      | screenLayout | orientation" />

android:configChanges eklendikten sonra, etkinliğiniz ve parçalarınız yok edilip yeniden oluşturulmak yerine onConfigurationChanged() için geri çağırma alır. Ardından görünümlerinizi manuel olarak güncelleyebilir, kaynakları yeniden yükleyebilir ve gerektiğinde diğer işlemleri gerçekleştirebilirsiniz.

<layout>

Android 7.0 (API düzeyi 24) ve sonraki sürümlerde, <layout> manifest öğesi, bir etkinliğin çok pencereli modda nasıl davrandığını etkileyen çeşitli özellikleri destekler:

  • android:defaultHeight, android:defaultWidth: Etkinlik, masaüstü pencereli görüntüleme modunda başlatıldığında varsayılan yükseklik ve genişlik.

  • android:gravity: Etkinliğin masaüstü pencere modunda başlatıldığında ilk yerleştirilmesi. Uygun değerler için Gravity sınıfına bakın.

  • android:minHeight, android:minWidth: Hem bölünmüş ekran hem de masaüstü pencereli görüntüleme modlarında etkinlik için minimum yükseklik ve minimum genişlik. Kullanıcı, bölünmüş ekran modunda ayırıcıyı hareket ettirerek bir etkinliği belirtilen minimum boyuttan daha küçük hale getirirse sistem, etkinliği kullanıcının istediği boyutta kırpar.

Aşağıdaki kodda, bir etkinliğin varsayılan boyutu ve konumu ile masaüstü pencere modunda görüntülendiğinde minimum boyutunun nasıl belirtileceği gösterilmektedir:

<activity android:name=".MyActivity">
    <layout android:defaultHeight="500dp"
          android:defaultWidth="600dp"
          android:gravity="top|end|..."
          android:minHeight="450dp"
          android:minWidth="300dp" />
</activity>

Çalışma zamanında çoklu pencere modu

Android 7.0'dan itibaren sistem, çok pencereli modda çalışabilen uygulamaları desteklemek için işlevler sunar.

Çoklu pencere modunda devre dışı bırakılan özellikler

Android, çok pencereli modda cihaz ekranını diğer etkinlikler veya uygulamalarla paylaşan bir etkinlik için geçerli olmayan özellikleri devre dışı bırakabilir ya da bu özellikleri yoksayabilir.

Ayrıca, bazı sistem kullanıcı arayüzü özelleştirme seçenekleri devre dışı bırakılır. Örneğin, uygulamalar çoklu pencere modunda çalışıyorsa durum çubuğunu gizleyemez (bkz. Sistem kullanıcı arayüzü görünürlüğünü kontrol etme).

Sistem, android:screenOrientation özelliğinde yapılan değişiklikleri yoksayar.

Çoklu pencere modu sorguları ve geri aramaları

Activity sınıfı, çok pencereli modu desteklemek için aşağıdaki yöntemleri sunar:

  • isInMultiWindowMode(): Etkinliğin çok pencereli modda olup olmadığını gösterir.

  • isInPictureInPictureMode(): Etkinliğin pencere içinde pencere modunda olup olmadığını gösterir.

  • onMultiWindowModeChanged(): Sistem, etkinlik çok pencereli moda girdiğinde veya bu moddan çıktığında bu yöntemi çağırır. Sistem, etkinlik çoklu pencere moduna giriyorsa yönteme doğru (true) değerini, etkinlik çoklu pencere modundan çıkıyorsa yanlış (false) değerini iletir.

  • onPictureInPictureModeChanged(): Sistem, etkinlik pencere içinde pencere moduna girdiğinde veya bu moddan çıktığında bu yöntemi çağırır. Sistem, etkinlik pencere içinde pencere moduna giriyorsa yönteme true değerini, pencere içinde pencere modundan çıkıyorsa false değerini iletir.

Fragment sınıfı, bu yöntemlerin birçoğunun sürümlerini kullanıma sunar. Örneğin, Fragment.onMultiWindowModeChanged().

Pencere içinde pencere modu

Bir etkinliği pencere içinde pencere moduna almak için enterPictureInPictureMode() yöntemini çağırın. Bu yöntem, cihaz pencere içinde pencere modunu desteklemiyorsa hiçbir etki yaratmaz. Daha fazla bilgi için Pencere içinde pencere (PIP) özelliğini kullanarak video ekleme başlıklı makaleyi inceleyin.

Çoklu pencere modunda yeni etkinlikler

Yeni bir etkinlik başlattığınızda, mümkünse yeni etkinliğin mevcut etkinliğin yanında gösterilmesi gerektiğini belirtebilirsiniz. Sisteme yeni etkinliği bitişik bir pencerede oluşturmayı denemesini söyleyen ve böylece iki etkinliğin ekranı paylaşmasını sağlayan amaç işaretini FLAG_ACTIVITY_LAUNCH_ADJACENT kullanın. Sistem bunu yapmak için elinden geleni yapar ancak bu durumun gerçekleşeceği garanti edilmez.

Bir cihaz masaüstü pencere modundaysa ve yeni bir etkinlik başlatıyorsanız ActivityOptions.setLaunchBounds() yöntemini çağırarak yeni etkinliğin boyutlarını ve ekran konumunu belirtebilirsiniz. Cihaz çoklu pencere modunda değilse yöntemin etkisi olmaz.

API düzeyi 30 ve daha düşük sürümlerde, bir görev yığını içinde etkinlik başlatırsanız etkinlik, ekrandaki etkinliğin yerini alır ve çok pencereli tüm özelliklerini devralır. Yeni etkinliği çok pencereli modda ayrı bir pencere olarak başlatmak istiyorsanız yeni bir görev yığınında başlatmanız gerekir.

Android 12 (API düzeyi 31), uygulamaların bir uygulamanın görev penceresini birden fazla etkinlik arasında bölmesine olanak tanır. Bir XML yapılandırma dosyası oluşturarak veya Jetpack WindowManager API çağrıları yaparak uygulamanızın etkinliklerini nasıl göstereceğini (tam ekran, yan yana veya üst üste) belirleyebilirsiniz.

Sürükleme ve bırakma

Kullanıcılar, iki etkinlik ekranı paylaşırken bir etkinlikten diğerine veri sürükleyip bırakabilir. (Android 7.0'dan önce kullanıcılar verileri yalnızca tek bir etkinlik içinde sürükleyip bırakabiliyordu.) Bırakılan içeriğin kabul edilmesi için hızlıca destek eklemek üzere DropHelper API'sini inceleyin. Kapsamlı sürükle ve bırak talimatları için Sürükle ve bırak özelliğini etkinleştirme başlıklı makaleyi inceleyin.

Çoklu örnek

Her kök etkinliğin kendi penceresinde gösterilen kendi görevi vardır. Uygulamanızın yeni bir örneğini ayrı bir pencerede başlatmak için FLAG_ACTIVITY_NEW_TASK işaretini kullanarak yeni etkinlikler başlatın. Yeni pencere için belirli bir konum istemek üzere bu ayarı çok pencereli özelliklerle birlikte kullanabilirsiniz. Örneğin, bir alışveriş uygulaması ürünleri karşılaştırmak için yan yana birden fazla pencere gösterebilir.

Android 12 (API düzeyi 31) ve sonraki sürümlerde, etkinlik yerleştirme özelliğinde bir etkinliğin iki örneğini aynı görev penceresinde yan yana başlatabilirsiniz.

Kullanıcıların uygulama başlatıcıdan veya görev çubuğundan uygulamanızın başka bir örneğini başlatmasına izin vermek istiyorsanız başlatıcı etkinliğinizin manifest dosyasında android:resizeableActivity="true" öğesini ayarlayın ve birden fazla örneği engelleyen bir başlatma modu kullanmayın. Örneğin, singleInstancePerTask etkinliği, FLAG_ACTIVITY_MULTIPLE_TASK veya FLAG_ACTIVITY_NEW_DOCUMENT ayarlandığında farklı görevlerde birden çok kez oluşturulabilir.

Android 15 (API düzeyi 35) ve sonraki sürümlerde, PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI çoklu örnek desteğini beyan etmenize olanak tanır. Bu özellik, sistem kullanıcı arayüzünün uygulamadan birden fazla örnek oluşturmak için kullanıcının erişimine kontroller sunması konusunda açık bir sinyaldir. Bu özellik, başlatma modundan bağımsızdır ancak yalnızca bir etkinliğin veya uygulamanın başlatma modu bu özellikle uyumlu olduğunda (ör. başlatma modu singleInstance olmadığında) kullanılmalıdır.

Katlanabilir bir cihazda bir uygulamanın birden fazla örneği ayrı pencerelerde çalışırken cihazın duruşu değişirse bir veya daha fazla örnek arka plana gönderilebilir. Örneğin, katlanmamış bir cihazın kat yerinin her iki tarafında ayrı pencerelerde çalışan iki uygulama örneği olduğunu varsayalım. Cihaz katlıysa her iki örneğin pencerelerini daha küçük bir ekrana sığdırmaya çalışmak yerine örneklerden biri sonlandırılabilir.

Çoklu pencere modu doğrulama

Uygulamanızın API düzeyi 24 veya üstünü hedefleyip hedeflemediğine bakılmaksızın, Android 7.0 veya sonraki bir sürümü çalıştıran bir cihazda kullanıcılar uygulamayı çok pencereli modda başlatmaya çalıştığında nasıl davrandığını doğrulamanız gerekir.

Test cihazları

Android 7.0 (API seviyesi 24) veya sonraki sürümlerin yüklü olduğu cihazlar çoklu pencere modunu destekler.

API düzeyi 23 veya daha düşük

Kullanıcılar uygulamayı çoklu pencere modunda kullanmaya çalıştığında, uygulama sabit bir yönlendirme belirtmediği sürece sistem uygulamayı zorunlu olarak yeniden boyutlandırır.

Uygulamanız sabit bir yönlendirme beyan etmiyorsa uygulamanızı Android 7.0 veya sonraki bir sürümü çalıştıran bir cihazda başlatıp uygulamayı bölünmüş ekran moduna almaya çalışmalısınız. Uygulama zorunlu olarak yeniden boyutlandırıldığında kullanıcı deneyiminin kabul edilebilir olduğunu doğrulayın.

Uygulama sabit bir yön bildiriyorsa uygulamayı çoklu pencere moduna almaya çalışmalısınız. Bu işlemi yaptığınızda uygulamanın tam ekran modunda kaldığını doğrulayın.

API düzeyleri 24-30

Uygulamanız 24-30 arasındaki API düzeylerini hedefliyorsa ve çoklu pencere desteğini devre dışı bırakmıyorsa aşağıdaki davranışları hem bölünmüş ekran hem de masaüstü pencere modlarında doğrulayın:

  • Uygulamayı tam ekran olarak başlatın, ardından Son Kullanılanlar düğmesine uzun basarak çoklu pencere moduna geçin. Uygulamanın düzgün şekilde geçiş yaptığını doğrulayın.

  • Uygulamayı doğrudan çoklu pencere modunda başlatın ve uygulamanın düzgün şekilde başlatıldığını doğrulayın. Son Kullanılanlar düğmesine basıp uygulamanızın başlık çubuğuna uzun basarak ve başlık çubuğunu ekrandaki vurgulanmış alanlardan birine sürükleyerek uygulamayı çoklu pencere modunda başlatabilirsiniz.

  • Ekran ayırıcıyı sürükleyerek bölünmüş ekran modunda uygulamanızı yeniden boyutlandırın. Uygulamanın kilitlenmeden yeniden boyutlandırıldığını ve gerekli kullanıcı arayüzü öğelerinin görünür olduğunu doğrulayın.

  • Uygulamanız için minimum boyutlar belirlediyseniz pencere boyutu bu boyutlardan daha küçük olacak şekilde uygulamayı yeniden boyutlandırmayı deneyin. Uygulamanın, belirtilen minimum boyutlardan daha küçük olacak şekilde yeniden boyutlandırılamadığını doğrulayın.

  • Tüm testler boyunca uygulamanızın performansının kabul edilebilir olduğunu doğrulayın. Örneğin, uygulama yeniden boyutlandırıldıktan sonra kullanıcı arayüzünü güncellemek için çok uzun bir süre geçmediğini doğrulayın.

API düzeyi 31 veya üstü

Uygulamanız API düzeyi 31 veya daha yüksek bir sürümü hedefliyorsa ve ana etkinliğin minimum genişliği ile minimum yüksekliği, kullanılabilir ekran alanının ilgili boyutlarından küçük veya bu boyutlara eşitse API düzeyi 24-30 için listelenen tüm davranışları doğrulayın.

Test yapılacaklar listesi

Uygulamanızın çok pencereli moddaki performansını doğrulamak için aşağıdaki işlemleri deneyin. Aksi belirtilmediği sürece bu işlemleri hem bölünmüş ekran hem de masaüstü pencere modunda denemeniz gerekir.

  • Çoklu pencere moduna girme ve bu moddan çıkma

  • Uygulamanızdan başka bir uygulamaya geçin ve uygulama görünürken ancak etkin değilken düzgün çalıştığını doğrulayın. Örneğin, uygulamanız video oynatıyorsa kullanıcının başka bir uygulamayla etkileşimde bulunduğu sırada videonun oynatılmaya devam ettiğini doğrulayın.

  • Bölünmüş ekran modunda, ekran ayırıcıyı hareket ettirerek uygulamanızı hem büyütebilir hem de küçültebilirsiniz. Bu işlemleri hem yan yana hem de üst üste yapılandırmalarda deneyin. Uygulamanın kilitlenmediğini, temel işlevlerin görünür olduğunu ve yeniden boyutlandırma işleminin çok uzun sürmediğini doğrulayın.

  • Hızlı bir şekilde art arda birkaç yeniden boyutlandırma işlemi gerçekleştirme Uygulamanızın kilitlenmediğini veya bellek sızdırmadığını doğrulayın. Android Studio'nun bellek profil aracı, uygulamanızın bellek kullanımı hakkında bilgi sağlar (bkz. Bellek profil aracıyla uygulamanızın bellek kullanımını inceleme).

  • Uygulamanızı farklı pencere yapılandırmalarında normal şekilde kullanın ve uygulamanın düzgün çalıştığını doğrulayın. Metnin okunabilir olduğundan ve kullanıcı arayüzü öğelerinin etkileşimde bulunulamayacak kadar küçük olmadığından emin olun.

Çoklu pencere desteği devre dışı bırakıldı

API düzeyleri 24-30'da, android:resizeableActivity="false" değerini ayarlayarak çok pencereli desteğini devre dışı bıraktıysanız uygulamanızı Android 7.0-11 çalıştıran bir cihazda başlatmalı ve uygulamayı bölünmüş ekran ile masaüstü pencere modlarına almaya çalışmalısınız. Bunu yaptığınızda uygulamanın tam ekran modunda kaldığını doğrulayın.

Ek kaynaklar

Android'de çoklu pencere desteği hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: