Çoklu pencere modu, birden fazla uygulamanın aynı ekranı aynı anda paylaşmasını sağlar. 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.
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) ile küçük ekranlı cihazlarda bölünmüş ekran modu, belirli cihazlarda ise resim içinde resim modu kullanıma sunuldu.
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 (Pencere içinde pencere desteği bölümüne bakın).
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 çok pencereli modda çalışıp çalışamayacağını belirlemek için etkinliğin
minWidth
veminHeight
özelliklerini kontrol eder. Bu durumdaresizeableActivity="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.
Bölünmüş ekran modu
Kullanıcılar, aşağıdakileri yaparak bölünmüş ekran modunu etkinleştirir:
- Son kullanılanlar ekranını açın.
- Bir uygulamayı görünür hale getirmek için kaydırma
- Uygulama başlık çubuğunda uygulama simgesine basın.
- Bölünmüş ekran menü seçeneğini belirleyin.
- Son Kullanılanlar ekranından başka bir uygulama seçin veya Son Kullanılanlar ekranını kapatıp başka bir uygulama çalıştırın.
Kullanıcılar, pencere ayırıcıyı ekranın kenarına (yukarı veya aşağı, sola ya da sağa) sürükleyerek bölünmüş ekran modundan çıkabilir.
Bitişik başlatma
Uygulamanızın bir amaç üzerinden içeriğe erişmesi gerekiyorsa içeriği bitişik bir bölünmüş ekran penceresinde açmak için FLAG_ACTIVITY_LAUNCH_ADJACENT
simgesini kullanabilirsiniz.
FLAG_ACTIVITY_LAUNCH_ADJACENT
, Android 7.0'da (API düzeyi 24) bölünmüş ekran modunda çalışan uygulamaların bitişik pencerede etkinlik başlatmasını sağlamak için kullanıma sunulmuştur.
Android 12L (API düzeyi 32) ve sonraki sürümlerde, tam ekran çalışan uygulamaların bölünmüş ekran modunu etkinleştirmesine ve ardından etkinlikleri bitişik pencerede başlatmasına olanak tanımak için işaretin tanımı genişletildi.
Yakın bir etkinliği başlatmak için FLAG_ACTIVITY_NEW_TASK
ile birlikte FLAG_ACTIVITY_LAUNCH_ADJACENT
kullanın. Örneğin:
Kotlin
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) }
}
Java
public void openUrlInAdjacentWindow(String url) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
Ç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, belirli bir zamanda hiçbir etkinliğin odaklanmaması da mümkündür. Örneğin, bildirim çekmecesi açıksa. onStop()
Yöntemi 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) ç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, bu görünür ancak devam ettirilmeyen 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.
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:
Kotlin
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.
}
}
Java
@Override
public void onTopResumedActivityChanged(boolean topResumed) {
if (topResumed) {
// Top resumed activity.
// Can be a signal to re-acquire exclusive resources.
} else {
// No longer the top resumed activity.
}
}
Bir uygulamanı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.

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:
getCurrentWindowMetrics()
: Sistemin mevcut pencere durumuna ilişkin birWindowMetrics
nesnesi döndürür.getMaximumWindowMetrics()
: Sistemdeki en büyük olası pencere durumundaWindowMetrics
değerini döndürür.
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
- Ekranda gösterilecek içerik 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
'ını elde edin
Kotlin
val windowMetrics = context.createDisplayContext(display)
.createWindowContext(WindowManager.LayoutParams.TYPE_APPLICATION, null)
.getSystemService(WindowManager::class.java)
.maximumWindowMetrics
Java
WindowMetrics windowMetrics = context.createDisplayContext(display)
.createWindowContext(WindowManager.LayoutParams.TYPE_APPLICATION, null)
.getSystemService(WindowManager.class)
.getMaximumWindowMetrics();
Kullanımdan kaldırılan yöntemler
Display
yöntemleri getSize()
ve getMetrics()
, yeni WindowManager
yöntemleri lehine API seviyesi 30'da kullanımdan kaldırıldı.
Android 12 (API düzeyi 31), Display
yöntemlerini getRealSize()
ve getRealMetrics()
kullanımdan kaldırır ve davranışlarını getMaximumWindowMetrics()
davranışıyla daha yakından eşleşecek şekilde günceller.
Çoklu pencere modu yapılandırması
Uygulamanız Android 7.0'ı (API düzeyi 24) veya sonraki sürümleri 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 uygulamanızın bu tür cihazlarda kullanılabilirliğini kısıtlamak için Google Play'deki filtreleri kullanabilirsiniz.
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ü pencere 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 uymak gerektiğinde uyumluluk moduna alınır. - Küçük ekranlar (compact pencere boyutu sınıfı):
resizeableActivity="true"
ve etkinliğin minimum genişliği ve minimum yüksekliği çok pencereli mod gereksinimleri dahilindeyse etkinlik çok pencereli modu destekler.resizeableActivity="false"
ise etkinlik, minimum genişlik ve yükseklik değerlerinden bağımsız olarak çoklu pencere modunu 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 en boy oranı seçimini tamamen dikkate alır (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
Çoklu pencere yapılandırma değişikliklerini (ör. kullanıcı pencereyi yeniden boyutlandırdığında) kendiniz işlemek için uygulama manifestinizdeki android:configChanges
özelliğini en az 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, etkinlikleriniz 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 yapabilirsiniz.
<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
: Masaüstü pencereleme modunda başlatıldığında etkinliğin varsayılan yüksekliği ve genişliği.android:gravity
: Etkinliğin masaüstü pencere modunda başlatıldığında ilk yerleştirilmesi. Uygun değerler içinGravity
sınıfına bakın.android:minHeight
,android:minWidth
: Etkinliğin hem bölünmüş ekran hem de masaüstü pencereleme modlarındaki minimum yüksekliği ve minimum genişliği. 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 boyuta 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ı destekleyen 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 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. Etkinlik çoklu pencere moduna giriyorsa sistem yönteme doğru (true) değerini, ç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 doğru (true), pencere içinde pencere modundan çıkıyorsa yanlış (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 geçirmek 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 Resim içinde resim (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()
işlevini ç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şlattığınızda 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 edilmesiyle ilgili desteği hızlıca eklemek için DropHelper
API'sini inceleyin. Kapsamlı sürükle ve bırak rehberliği 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 aynı görev penceresinde bir etkinliğin iki örneğini 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 sonraki sürümleri hedefleyip hedeflemediğine bakılmaksızın, Android 7.0 veya sonraki sürümleri çalıştıran bir cihazda çoklu pencere modunda başlatılmaya çalışılması durumunda uygulamanızın 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ön belirtmiyorsa uygulamanızı Android 7.0 veya sonraki bir sürümün yüklü olduğu bir cihazda başlatıp 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önlendirme 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 hem bölünmüş ekran hem de masaüstü pencere modlarında aşağıdaki davranışları doğrulayın:
Uygulamayı tam ekran olarak başlatın, ardından Son Uygulamalar 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 üst 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ür 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 Memory Profiler'ı, uygulamanızın bellek kullanımı hakkında bilgi sağlar (bkz. Memory Profiler ile 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"
ayarını yaparak çoklu pencere 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:
- Android MultiWindowPlayground örneği