Çoklu pencere desteği

Android 7.0 ve sonraki sürümlerde, cihazlar çoklu pencere özelliği sayesinde aynı anda birden fazla uygulama gösterebilir. Android üç çoklu pencere yapılandırmasını destekler:

  • Serbest biçim: Kullanıcıların etkinlik bölmelerini dinamik olarak yeniden boyutlandırmasına ve ekranda ikiden fazla uygulamanın görünmesine olanak tanır. Masaüstü pencereli görüntüleme için kullanıcılar, masaüstü tarzı etkileşimler sunan bir masaüstünde serbest biçimli pencereler oluşturabilir.
  • Bölünmüş ekran: Kullanıcılara uygulamaları yerleştirebilecekleri iki etkinlik bölmesi sağlayan varsayılan çoklu pencere uygulaması.
  • Pencere içinde pencere (PiP): Android'i çalıştıran cihazların, kullanıcı diğer uygulamalarla etkileşimde bulunurken video içeriklerini küçük bir pencerede oynatmasına olanak tanır.

Çoklu pencere için cihaz gereksinimleri

Çoklu pencere desteği, Android 7.0 ve sonraki sürümlerde varsayılan olarak etkindir. Bu özelliği devre dışı bırakmak için cihazınızın config.xml dosyasında config_supportsMultiWindow işaretini false olarak ayarlayın.

Çoklu pencere, tüm düşük RAM'li cihazlarda (ActivityManager.isLowRam bildiren cihazlar) varsayılan olarak devre dışıdır. Düşük RAM'li cihazlar, config_supportsMultiWindow işaretinin değerini yoksayar.

Freeform

Serbest biçimli pencere özelliği, kullanıcının serbestçe yeniden boyutlandırılabilen pencereler oluşturmasına olanak tanır. Serbest biçimli pencereleme, pencereli görüntüleme için ön koşuldur. Serbest biçimli pencereleme özelliğini etkinleştirmek için cihazınızın aşağıdaki koşulları karşılaması gerekir:

  • config_supportsMultiWindow işaretini etkinleştirin.
  • Serbest biçimli pencere yönetimini aşağıdaki yöntemlerden biriyle etkinleştirin:
    • config.xml'da config_freeformWindowManagement işaretini etkinleştirin:
      <feature name="android.software.freeform_window_management" />
    • Cihaz makefile'ına aşağıdakileri ekleyin:
      PRODUCT_COPY_FILES += \
      frameworks/native/data/etc/android.software.freeform_window_management.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/android.software.freeform_window_management.xml

Android 16'da OEM'ler, Enable desktop windowing'i kullanarak cihazlarında serbest biçimli çoklu pencere yapılandırması için pencereli görüntülemeyi destekleyebilir.

Pencereli görüntüleme

Pencereli görüntüleme özelliği, serbest biçimli pencereler üzerine inşa edilmiş, büyük ekranlarda çoklu görev için bir çalışma alanı sağlar. Çalışma alanı, tam ekranın yanında yer alır. Kullanıcıya daha esnek bir çoklu görev deneyimi sunan ek kullanıcı arayüzü olanakları ve davranışları vardır:

  • Klavye veya fare etkileşimi: Hem öncelikle dokunma hem de öncelikle klavye veya fare etkileşimlerini destekler.
  • Serbest biçimli pencereler: Uygulamaları, pencere başlık çubukları ve kontrolleriyle yeniden boyutlandırılabilir ve taşınabilir pencerelerde çalıştırır.
  • Geliştirilmiş görev çubuğu: Çalışan ve sabitlenmiş uygulamalara kolay erişim sağlar.
  • Harici ekran optimizasyonu: Bağlı monitörleri, desteklenen cihazlar için masaüstü ortamlarına dönüştürür.
  • Sanal masalar: Kullanıcıların uygulamaları birden fazla çalışma alanında düzenlemesine olanak tanır.

Bir cihazı masaüstü pencereleme için yapılandırmak üzere aşağıdaki ön koşulları karşılayın:

  • Aşağıdaki işaretleri etkinleştirin:
    • Freeform windowing için tüm ön koşullar
    • Genel pencereli görüntüleme işareti config_isDesktopModeSupported
  • Sistem Arayüzü için en az 600 dp genişliğinde bir ekran gerekir. Masaüstü pencereli görüntüleme özelliği, daha küçük ekranlarda beklendiği gibi çalışmayabilir.
  • Cihaz, düşük RAM'li bir cihaz olmamalıdır. ActivityManager.isLowRam döndürmelidir false. Düşük RAM'li cihazlar çoklu pencere özelliklerinin hiçbirini kullanamaz.

Aşağıdaki tabloda, ekran boyutuna ve cihazın nasıl kullanılacağına bağlı olarak bir cihazın masaüstü pencereli görüntüleme için yapılandırılabileceği yapılandırmalar listelenmektedir:

Mod Yalnızca tam ekran kullanılabilen elde taşınabilir cihaz Bağlı ekrana tam ekran yansıtma Bağlı ekrana genişletilen, öncelikle tam ekran olarak kullanılan büyük ekran Pencereli görüntüleme öncelikli büyük ekran
Örnek form faktörü Elde taşınabilir telefon HDMI'yı harici ekrana destekleyen elde taşınabilir telefon HDMI'dan harici ekrana bağlantıyı destekleyen tablet HDMI'yi harici ekrana destekleyen klavyeli tablet
Dahili ekran deneyimi Tam ekran, bölünmüş ekran, PiP ve masaüstü dışı serbest biçim desteklenir. Tam ekran, bölünmüş ekran ve PiP desteklenir. Ayrı masalar aracılığıyla tam ekran, bölünmüş ekran ve PIP destekli pencereli görüntüleme Pencereli görüntüleme, varsayılan görüntüleme modudur (ayrı masaüstleri desteklenir). Kullanıcılar, ayrı masaüstleri aracılığıyla tam ekran veya dokunma modu pencereli görüntülemeye girebilir.
Bağlı ekran deneyimi Yalnızca dahili ekranı yansıtma Masaüstü pencereli görüntüleme yalnızca bağlı ekranlarda Masaüstü pencereli görüntüleme, masaları genişletir ve dahili ekranlarda kullanılabilir. Masaüstü pencereli görüntüleme, masaları genişletir ve dahili ekranlarda kullanılabilir.
Yapılandırma ayarları
config_supportsMultiWindow true true true true
config_freeformWindowManagement true true true true
config_isDesktopModeSupported false true true true
config_canInternalDisplayHostDesktops Yoksayıldı false true true
config_enterDesktopByDefaultOnFreeformDisplay Yoksayıldı false false true

config_isDesktopModeSupported

Yapılandırma yerleşimi işareti config_isDesktopModeSupported, pencereli görüntülemeyi etkinleştirmek için kullanılan en üst düzey işarettir. Bu ayar etkinleştirilmezse diğer tüm yapılandırma ayarları yoksayılır. config.xml bölümünde true olarak ayarlayın:

<!-- Globally enable Desktop windowing logic -->
    <bool name="config_isDesktopModeSupported">true</bool>

config_isDesktopModeSupported ayarı true olduğunda sistem, uygun harici ekranları (ör. DisplayPort veya HDMI ile bağlananlar) otomatik olarak masaüstü pencereli görüntüleme için aday olarak değerlendirir. Ekran, Pencere Yöneticisi tarafından uygun olarak kabul edilmelidir (en az herkese açık ve güvenilir olmalıdır, Masaüstü pencereli görüntüleme bölümüne bakın). Sistem, bu ekranlarda görevleri varsayılan olarak serbest biçim modunda başlatmaya çalışır.

config_canInternalDisplayHostDesktops

Yapılandırma yerleşimi işareti config_canInternalDisplayHostDesktops, cihazın dahili ekranında masaüstü pencerelemeyi etkinleştirir. config.xml bölümünde true olarak ayarlayın:

<!-- Allow the primary internal display to host desktop sessions -->
    <bool name="config_canInternalDisplayHostDesktops">true</bool>

Pencereli görüntüleme, küçük bir elde taşınabilir telefona kıyasla tablet gibi büyük ekranlı bir cihazda en iyi şekilde çalışır. Etkinleştirilmediyse masaüstü pencereli görüntüleme yalnızca harici bir ekranda desteklenir (cihazın HDMI'yı desteklediği varsayılır).

config_enterDesktopByDefaultOnFreeformDisplay

Yapılandırma yerleşimi işareti config_enterDesktopByDefaultOnFreeformDisplay, cihazın dahili ekranında varsayılan pencereleme modu olarak pencereli görüntülemeyi ayarlar. Etkinleştirilmemişse tam ekran, varsayılan pencereli görüntüleme modudur ve masalar birlikte bulunur. config.xml bölümünde true olarak ayarlayın:

<!-- Enable Desktop windowing as the default windowing mode on the internal display -->
    <bool name="config_enterDesktopByDefaultOnFreeformDisplay">true</bool>

Görev sınırlarını etkinleştirme

Masaüstü pencereli görüntüleme sisteminde desteklenen maksimum görev sayısını yapılandırmak için config.xml içindeki yapılandırma yer paylaşımı işaretini config_maxDesktopWindowingActiveTasks desteklenen maksimum görev sayısına ayarlayın. Sınırsız sayıda görevi desteklemek için işaret değerini 0 olarak ayarlayın:

<!-- Maximum number of tasks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingActiveTasks">4</integer>

Masa sınırlarını etkinleştirme

Masaüstü pencereli görüntüleme özelliğinde desteklenen maksimum sanal masa sayısını yapılandırmak için config.xml içindeki config_maxDesktopWindowingDesks yapılandırma yer paylaşımlı işareti desteklenen maksimum masa sayısına ayarlayın. Sınırsız sayıda masayı desteklemek için işaret değerini 0 olarak ayarlayın:

<!-- Maximum number of virtual desks supported in desktop windowing -->
      <integer name="config_maxDesktopWindowingDesks">4</integer>

Bölünmüş ekran

Çoklu pencerenin varsayılan deneyimi, sistem arayüzünün dikey veya yatay olarak cihazın ortasında bölündüğü bölünmüş ekran modudur. Kullanıcılar, cihazın yönüne bağlı olarak bölme çizgisini yan yana veya yukarıdan aşağıya sürükleyerek pencereyi yeniden boyutlandırabilir.

Cihaz üreticileri, bölünmüş ekranı etkinleştirdikten sonra serbest biçim veya PiP'yi etkinleştirebilir.

Android 8.0 ve sonraki sürümlerde, kullanıcı Ana Sayfa'ya dokunduğunda başlatıcı sıkıştırılarak bölünmüş ekran özelliği iyileştirilir. Uygulama ayrıntıları için Bölünmüş ekran etkileşimleri başlıklı makaleyi inceleyin.

Pencere içinde pencere

Cihaz üreticileri, config_supportsMultiWindow işaretini kullanarak çoklu pencere modunu etkinleştirdikten sonra pencere içinde pencere özelliğini destekleyebilir. Bu özellik, kullanıcıların diğer etkinliklere göz atarken video izlemesine olanak tanır. Bu özellik Android TV cihazlar için tasarlanmış olsa da diğer cihaz türleri de bu özelliği destekleyebilir.

PiP'yi desteklemek için PackageManager#FEATURE_PICTURE_IN_PICTURE sistem özelliğini /android/frameworks/base/core/java/android/content/pm/PackageManager.java'de etkinleştirin.

Android 8.0 ve sonraki sürümleri çalıştıran cihazlarda pencere içinde pencere özelliğinin uygulanmasıyla ilgili daha fazla ayrıntı için Pencere içinde pencere başlıklı makaleyi inceleyin.

Sistem Arayüzü

Çoklu pencere modu doğrulama'ya göre tüm standart sistem kullanıcı arayüzlerini destekleyin.

Uygulamalar

Önceden yüklenmiş uygulamalarda çoklu pencere modunu desteklemek için Çoklu pencere modunu destekleme başlıklı makaleyi inceleyin.

Doğrulama

Çoklu pencere uygulamanızı doğrulamak için ilgili CTS testlerini çalıştırın ve Çoklu pencere modu doğrulama bölümündeki adımları uygulayın.

Android sürümü CTS testi
7,0 /platform/cts/hostsidetests/services/activitymanager/src/android/server/cts
8.0 /platform/cts/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts
9.0 /platform/cts/tests/framework/base/activitymanager/src/android/server/am
Android 10 ve sonraki sürümler /platform/cts/tests/framework/base/windowmanager/src/android/server/wm