Çoklu pencere modunu destekleme

Çoklu pencere modu, birden fazla uygulamanın aynı ekranı aynı anda paylaşmasını sağlar. Uygulamalar yan yana veya birbirlerinin üzerinde olabilir (bölünmüş ekran modu), tek bir uygulama başka uygulamaların (pencere içinde pencere modu) yer paylaşımlı şekilde gösterildiği küçük bir pencere veya bağımsız ayrı taşınabilir, yeniden boyutlandırılabilir pencerelerde (serbest biçim modu) kullanın.

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

Kullanıcı deneyimi, Android sürümüne ve cihazın türüne bağlıdır:

  • Android 7.0 (API düzeyi 24) ile küçük ekranda bölünmüş ekran modu kullanıma sunuldu ve belirli cihazlarda pencere içinde pencere modunu kullanabilirsiniz.

    • Bölünmüş ekran modu, ekranı iki uygulamayla doldurarak iki uygulamayı gösterir. üst üste dizmesi gerekir. Kullanıcılar ayırıcıyı sürükleyebilir İki uygulamayı birbirinden ayırarak bir uygulamayı büyütüp diğerini küçültmek.

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

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

      Şu adımları uygulayarak uygulamanızın çoklu pencere modunu nasıl işleyeceğini yapılandırabilirsiniz: Etkinliğinizin izin verilen minimum boyutlarını. İsterseniz ayarlayarak uygulamanız için çoklu pencere modunu Sistemin her zaman gösterilmesini sağlamak için resizeabableActivity="false" yardımcı olabilir.

  • Android 8.0 (API düzeyi 26), pencere içinde pencere modunu küçük sürüme geçirir cihazları ayırın.

  • Android 12 (API düzeyi 31), çoklu pencere modunu standart davranışı haline getirir.

    • Büyük ekranlarda (orta veya genişletilmiş pencere boyutu sınıfı), platform, uygulamadan bağımsız olarak çoklu pencere modunda tüm uygulamaları destekler yapılandırma. resizeableActivity="false" ise uygulama uyumluluk modunu etkinleştirmenizi öneririz.

    • Küçük ekranlarda (kompakt pencere boyutu sınıfı) sistem, bir etkinliğin minWidth ve minHeight Etkinlik, çoklu pencere modunda çalıştırılabilir. Eğer resizeableActivity="false", uygulamanın çalışması engellendi çoklu pencere modunu kullanabilirsiniz.

    ziyaret edin.

Bölünmüş ekran modu

Kullanıcılar, aşağıdakileri yaparak bölünmüş ekran modunu etkinleştirebilir:

  1. Son Kullanılanlar ekranını açın.
  2. Bir uygulamayı kaydırarak görünüm içine alın
  3. Uygulama 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 veya Son Kullanılanlar ekranını kapatın ve başka bir uygulama çalıştır

Kullanıcılar, bölünmüş ekran modundan, pencere ayırıcısını ekranın kenarına sürükleyerek ekranda yukarı veya aşağı, sola veya sağa doğru.

Bitişikteki başlat

Uygulamanızın içeriğe bir intent üzerinden erişmesi gerekiyorsa Bitişikteki bir öğeyi açmak için FLAG_ACTIVITY_LAUNCH_ADJACENT bölünmüş ekran penceresine geçer.

FLAG_ACTIVITY_LAUNCH_ADJACENT, aşağıdaki amaçlarla Android 7.0'da (API düzeyi 24) kullanıma sunulmuştur: bölünmüş ekran modunda çalışan uygulamaların bitişikteki bölmelerde etkinlik başlatmasını penceresini kapatın.

Android 12L (API düzeyi 32) ve sonraki sürümler, bayrağın tanımını tam ekran çalışan uygulamaların bölünmüş ekran modunu etkinleştirmesini ve ardından başlat etkinlikleri gösterir.

Bitişik bir etkinliği başlatmak için şurada FLAG_ACTIVITY_LAUNCH_ADJACENT işlevini kullanın: FLAG_ACTIVITY_NEW_TASK ile birlikte, ö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) } }
.

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

Çoklu pencere modu, etkinlik yaşam döngüsünü değiştirmez. Ancak uygulamaların birden çok pencerede devam ettirilen durumu, uygulamanın farklı sürümlerine göre farklılık gösterir. Android

Çoklu devam ettirme

Android 10 (API düzeyi 29) ve daha yeni sürümler çoklu devam ettirmeyi destekler. Cihaz birden fazla penceredeyken etkinlikler RESUMED durumunda kalır yatırım yapmanız önemlidir. Şeffaf bir etkinlik veya aktiviteye odaklanılamıyorsa (örneğin, aktivite) pencere içinde pencere moduna gidin. Hiçbir etkinliğin belirli bir ana belirli bir süre için geçerli olmayabilir. Örneğin, bildirim çekmecesi açık olabilir. onStop() yöntemi her zamanki gibi çalışır: Bir etkinlik kaldırıldığında yöntem, ekranda görebilirsiniz.

Çoklu devam ettirme özelliği, Android 9 (API düzeyi) çalıştıran belirli cihazlarda da kullanılabilir. 28). Android 9 cihazlarda çoklu devam ettirmeyi etkinleştirmek için aşağıdaki manifesti ekleyin meta veri:

<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 şuraya bakın: cihaz teknik özellikleri.

Android 9

Android 9 (API düzeyi 28) ve önceki sürümlerde çoklu pencere modunda yalnızca etkinlik Kullanıcı en son etkileşime geçtiğinde aynı zamanda etkin durumdadır. Bu etkinliği en üst olarak kabul edilir ve RESUMED bölgesindeki tek etkinliktir durumu. Diğer tüm görünür etkinlikler STARTED olup RESUMED değildir. Ancak sistem, bu görünür ancak devam ettirilmeyen etkinlikleri daha yüksek etkinliklerden daha önceliklidir. Kullanıcı görünür etkinlikleri, etkinliği devam ettirildiğini ve etkinliği STARTED durumuna girer.

Tek bir etkin uygulama işleminde 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ı çoklu pencere moduna aldığında sistem, İşleyici yapılandırmasında belirtilen şekilde bir yapılandırma değişikliği etkinliği değişiklikler başlıklı makaleyi inceleyin. Bu durum, kullanıcı uygulamayı yeniden boyutlandırdığında veya tekrar geri koyduğunda da gerçekleşir moduna geçer.

Esasen, bu değişikliğin etkinlik yaşam döngüsü üzerindeki etkileri, sistem, cihazın dikey görünümden uygulamaya geçtiğini bildirir yatay yönde (ör. uygulama boyutlarının yalnızca değiştiriliyor. Etkinliğiniz yapılandırma değişikliğinin kendisini işleyebilir veya uygulamanız, sistemin etkinliği kaldırmasına ve yeni boyut oluşturabilirsiniz.

Kullanıcı bir pencereyi yeniden boyutlandırıyorsa ve pencereyi her iki boyutta da büyütüyorsa sistem, etkinliği kullanıcı işlemi ve sorun yapılandırmasıyla eşleşecek şekilde yeniden boyutlandırır gerektiği şekilde değişecektir. Uygulama, yeni maruz kalan alanlarda çizim konusunda geride kalıyorsa sistemi bu alanları geçici olarak windowBackground özelliğini kullanarak veya varsayılan olarak windowBackgroundFallback stil özelliği.

Özel kaynak erişimi

Çoklu devam ettirme özelliğinin desteklenmesine yardımcı olmak için onTopResumedActivityChanged() yaşam döngüsü geri çağırması.

Bir etkinlik, devam ettirilen en popüler etkinliği kazandığında veya kaybettiğinde geri çağırma çağrılır ortak bir tekil kaynağın kullanıldığı durumlarda önemli olan, mikrofon veya kamera gibi:

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. } }

Bir uygulamanın, bir hesabın kaldırılması gibi başka nedenlerle kaynak kaybedebileceğini unutmayın. bir donanım parçası olmadığını unutmayın.

Bir uygulama, her halükarda etkinlikler ve durum değişikliklerini mevcut kaynakları etkilemesidir.

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

resizeableActivity=false özelliğinin özel kamera garantisi olmadığını unutmayın. Kamerayı kullanan diğer uygulamalar diğer ekranlarda açılabileceğinden erişim sağlayın.

Şekil 2. Kamera çoklu pencere modunda.

Odağı kaybedildiğinde uygulamanızın kamerayı serbest bırakması gerekmez. Örneğin, kullanıcı etkileşimde bulunurken kamera önizlemesine devam etmek isteyebilirsiniz. yeni odaklı, en iyi devam ettirilen uygulama ile başlar. Uygulamanızın her zaman devam ettirilen en önemli uygulama olmadığı halde kamerayı koordine etmesi gerekir. kılıfa doğru şekilde koyabilirsiniz. Devam ettirilen en önemli uygulama bu kamera kamerayı açabilir ve uygulamanız erişimi kaybeder. Uygulamanız şurayı yeniden açabilir: kameraya doğru odaklanmanızı sağlar.

Bir uygulama CameraDevice.StateCallback#onDisconnected() aldıktan sonra kamera cihazında yapılan sonraki çağrılarda CameraAccessException.

Çoklu Ekran

Android 10 (API düzeyi 29), ikincil ekranlarda etkinlikleri destekler. Bir etkinlik birden çok ekranlı bir cihazda çalışıyorsa, kullanıcılar etkinliği görüntüler. Çoklu devam ettirme şunlar için geçerlidir: çok ekranlı senaryoları da göz önünde bulundurun. çeşitli etkinlikler anlamına gelir.

Bir uygulama, başlatıldığında veya ne zaman çalıştırılması gerektiğini belirtebilir başka bir etkinlik oluşturur. Bu davranış, etkinlik başlatma moduna bağlıdır manifest dosyasında ve Etkinlik başlatan varlık. Daha fazlası için ActivityOptions sınıfını inceleyin bolca fırsat sunuyor.

Bir etkinlik ikincil ekrana taşındığında bağlam üzerinden iletebilir güncelleme, pencere yeniden boyutlandırma ve yapılandırma ile kaynak değişiklikleri. Etkinlik işleme, yapılandırma değişikliğinden sonra, etkinlik onConfigurationChanged(); Aksi takdirde etkinlik yeniden başlatılır.

Bir etkinlik, mevcut ekranı onCreate() ve Yapılandırma değişikliği yapılıyorsa onConfigurationChanged(). Şunları yaptığınızdan emin olun: Ekran değiştiğinde kaynakları ve düzenleri güncelleme.

Bir etkinlik için seçilen başlatma modu birden fazla örneğe izin veriyorsa tıkladığınızda etkinliğin yeni bir örneğini oluşturabilirsiniz. Her iki etkinlik aynı anda devam ettirilir.

Şekil 3.Bir etkinliğin birden çok ekranda birden çok kez gösterilmesi.

Ayrıca, kullanıma sunduğumuz çoklu ekran API'leri hakkında da bilgi edinmek isteyebilirsiniz. Android 8.0'da.

Etkinlik ve uygulama bağlamı

Çoklu görüntülü reklamlarda doğru bağlamı kullanmak çok önemlidir. Kaynaklara erişirken etkinlik bağlamı (gösterilen) uygulamadan farklı olduğunda bağlam (değil).

Etkinlik bağlamı ekranla ilgili bilgiler içerir ve her zaman etkinliğin göründüğü görüntüleme alanına göre ayarlanır. Bu şekilde şunları yapabilirsiniz: görüntü yoğunluğu veya pencere metrikleri hakkında doğru bilgileri almak için uygulamasını indirin. Her zaman etkinlik bağlamını (veya başka bir kullanıcı arayüzü tabanlı) bağlam) kullanabilirsiniz. Bu ayrıca bağlamdaki bilgileri kullanan bazı sistem API'lerini etkiler (örneğin, Kısa mesajlara genel bakış).

Etkinlik penceresi yapılandırması ve üst ekran, kaynakları ve bağlam. Mevcut ekranı aşağıdaki gibi alın:

val activityDisplay = activity.getDisplay()

Mevcut etkinlik aralığı metriklerini alın:

val windowMetrics = activity.getWindowManager().getCurrentWindowMetrics()

Geçerli sistem yapılandırması için maksimum pencere metriklerini alın:

val maximumWindowMetrics = activity.getWindowManager().getMaximumWindowMetrics()

Maksimum aralık metrikleri, hesaplamalar, düzen seçimleri veya önceden getirilecek kaynakların boyutunu belirlemektir. Bu seçeneğin kullanılabilir olması onCreate() işlevi, bu kararları ilk düzenden önce vermenize olanak sağlar pas kullanabilir. Bu metrikler, belirli görünüm öğelerini düzenlemek için kullanılmamalıdır; bunun yerine Configuration nesnesindeki bilgileri kullanın.

Ekran kesimleri

Katlanabilir cihazların katlanıp açıldığında farklı kesim geometrisi olabilir. Kesme sorunlarını önlemek için Ekran kesimlerini destekleme bölümüne bakın.

İkincil ekranlar

Kullanılabilir ekranları DisplayManager sistem hizmetinden edinebilirsiniz:

val displayManager =
getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val displays =
displayManager.getDisplays()

Belirli bir ekran hakkında bilgi almak için Display sınıfını kullanın. Örneğin, Bunlar görüntü boyutu veya ekranın güvenli olup olmadığını belirten bayraklar gibidir. Ancak, görüntü boyutunun görüntü alanına sahip olmanız gerekir. Çoklu pencere modunda, uygulamanız ekranın bir kısmını kaplar.

Bir etkinliğin ekranda başlatılıp başlatılamayacağını belirleyin:

val activityManager =
getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager val
activityAllowed = activityManager.isActivityStartAllowedOnDisplay(context,
displayId, intent)

Sonra ekranda etkinliği başlatın:

val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId) startActivity(intent,
options.toBundle())

Çoklu ekran desteği

Android, yazılım klavyeleri, duvar kağıtları ve başlatıcılar.

Yazılım klavyesi

Ekran yapılandırıldıysa klavye ikincil ekranda gösterilebilir süslemelerini isteyebilirsiniz. Giriş yöntemi düzenleyicisi, metin alanı giriş isteğinde bulunur.

Şekil 4. İkincil ekrandaki klavye.

Duvar kağıdı

Android 10'da (API düzeyi 29) ikincil ekranlarda duvar kağıdı olabilir. İlgili içeriği oluşturmak için kullanılan çerçevesi her biri için ayrı bir WallpaperService.Engine örneği oluşturur görüntüleyin. Her motorun yüzeyinin ayrı ayrı çizildiğinden emin olun. Geliştiriciler görüntülü reklam bağlamını kullanarak öğeleri WallpaperService.Engine#getDisplayContext(). Ayrıca WallpaperInfo.xml dosya grubu android:supportsMultipleDisplays="true".

Şekil 5. Telefonda ve ikincil ekranda duvar kağıdı.

Launcher'lar

Yeni amaç filtresi kategorisi (SECONDARY_HOME), özel bir etkinlik sağlar geçiş yapmak için de kullanabilirsiniz. Etkinliğin örnekleri, kullanılan tüm ekranlarda kullanılır. her ekran için bir tane olmak üzere sistem süslemelerini destekler.

<activity>
    ...
    <intent-filter>
        <category android:name="android.intent.category.SECONDARY_HOME" />
        ...
    </intent-filter>
</activity>

Etkinlik, birden fazla örneği engellemeyen bir başlatma moduna sahip olmalıdır ve farklı ekran boyutlarına uyum sağlayabiliyor. Başlatma modu singleInstance veya singleTask.

Örneğin, Launcher3'in AOSP uygulaması, SECONDARY_HOME etkinliği.

Şekil 6. Telefonda Materyal Tasarım başlatıcı.
ziyaret edin.
'nı inceleyin.
7. Şekil. İkincil ekranda Materyal Tasarım başlatıcı.

Aralık metrikleri

Android 11 (API düzeyi 30) aşağıdaki WindowManager yöntemlerini kullanıma sunmuştur için şu adımları izleyin:

Jetpack WindowManager kitaplığının yöntemleri computeCurrentWindowMetrics() ve computeMaximumWindowMetrics() benzer işlevler sunuyor emin olun.

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

  • Görüntülü reklam bağlamı oluşturma
  • Ekran için pencere bağlamı oluştur
  • Pencere bağlamının WindowManager bilgisini al
  • Uygulamanın kullanabileceği maksimum görüntüleme alanının WindowMetrics kadarını alın

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

Desteği sonlandırılan yöntemler

Display yöntemleri getSize() ve getMetrics() şu tarihte kullanımdan kaldırıldı: Yeni WindowManager yöntemlerini destekleyen API düzeyi 30.

Android 12 (API düzeyi 31), Display yöntemlerini getRealSize() ve getRealMetrics() ve davranışını daha yakından eşleşecek şekilde günceller. veya getMaximumWindowMetrics() davranışı.

Çoklu pencere modu yapılandırması

Uygulamanız Android 7.0 (API düzeyi 24) veya sonraki sürümleri hedefliyorsa ve uygulamanızdaki etkinliklerin çoklu pencere modunu destekleyip desteklemediğini kontrol edebilirsiniz. Faturalandırma hesabınızdaki ücretleri takip etmek için özelliklerini kontrol etmenizi öneririz. Kök etkinliğinin özellik ayarları, görev grubundaki tüm etkinlikler için geçerli olur. Örneğin, kök etkinlikte android:resizeableActivity="true" varsa tümü görev yığınındaki etkinlikler yeniden boyutlandırılabilir. Bazı daha büyük cihazlarda Chromebook'lar için bu, veri merkezlerini değiştirseniz bile android:resizeableActivity="false" Bu durum uygulamanızı bozarsa şunu kullanabilirsiniz: Google Play'deki filtreleri kullanarak uygulamanızın bu tür cihazlarda kullanılabilirliğini kısıtlayabilirsiniz.

Android 12 (API düzeyi 31) varsayılan olarak çoklu pencere moduna ayarlanır. Büyük ekranlarda (orta veya genişletilmiş pencere boyutu sınıfı), tüm uygulamalar birden fazla pencerede çalışır modunda kullanabilirsiniz. Küçük ekranlarda sistem, minWidth, minHeight ve resizeableActivity etkinliklerinin ayarlarını kullanarak etkinliğin çoklu pencere modunda çalışıp çalışmadığını belirler.

resizeableActivity

Manifest'inizin <activity> veya <application> bölümünde bu özelliği ayarlayın öğesi:

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

Bu özellik true değerine ayarlanırsa etkinlik bölünmüş ekranda başlatılabilir. ve serbest biçim modlarında kullanılabilir. Özellik false değerine ayarlanırsa etkinlik çoklu pencere modunu destekler. Değer yanlış ise ve kullanıcı etkinliği çoklu pencere modunda başlatırsanız etkinlik tüm ekranı devralır tıklayın.

Uygulamanız API düzeyi 24 veya üstünü hedefliyorsa ancak bu özelliğin değeri varsayılan olarak "true" (doğru) değerine ayarlanır.

Uygulamanız API düzeyi 31 veya üstünü hedefliyorsa bu özellik küçük ve büyük ekranlar:

  • Büyük ekranlar (orta veya genişletilmiş pencere boyutu sınıfı): Tüm uygulamalar çoklu pencere modunu destekler. Bu özellik, bir etkinliğin yeniden boyutlandırabilirsiniz. resizeableActivity="false" ise uygulama uyumluluk modunu etkinleştirmenizi öneririz.
  • Küçük ekranlar (kompakt pencere boyutu sınıfı): resizeableActivity="true" ve etkinlik minimum genişlik ve minimum yükseklik çoklu pencere koşullarını karşılıyorsa etkinlik, çoklu pencere özelliğini destekler. yatırım yapmanız önemlidir. resizeableActivity="false" ise etkinliği desteklemiyor etkinliğin minimum genişliği ve yüksekliğine bakılmaksızın çoklu pencere modu.

supportsPictureInPicture

Manifest'inizin <activity> düğümünde bu özelliği ayarlayarak Etkinlik, pencere içinde pencere modunu destekliyor.

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

configChanges

Birden çok pencereli yapılandırma değişikliklerini kendiniz yönetmek için (ör. bir kullanıcının bir pencereyi yeniden boyutlandırdığında uygulamanıza android:configChanges özelliğini ekleyin en azından aşağıdaki değerlere sahip manifest <activity> düğümünü inceleyin:

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

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

<layout>

Android 7.0 (API düzeyi 24) ve sonraki sürümlerde <layout> manifest öğesi Bir etkinliğin çoklu pencerede nasıl davranacağını etkileyen çeşitli özellikleri destekler mod:

  • android:defaultHeight, android:defaultWidth: Varsayılan yükseklik ve genişlik serbest biçim modunda başlatıldığında etkinlik.

  • android:gravity: Etkinliğin başlatıldığında ilk yerleşimi kullanabilirsiniz. Uygun değerler için Gravity sınıfına bakın.

  • android:minHeight, android:minWidth: Minimum yükseklik ve minimum genişlik hem bölünmüş ekran hem de serbest biçimli modlardaki etkinlik için Kullanıcı taşınırsa bölünmüş ekran modunda bölerek bir aktiviteyi belirtilen bir minimum değer olursa sistem, etkinliği kullanıcının kabul edersiniz.

Aşağıdaki kodda, bir etkinliğin varsayılan boyutunun ve konumunun nasıl belirtileceği gösterilmektedir ve etkinlik serbest biçim modunda görüntülendiğinde minimum boyutu:

<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

Sistem, Android 7.0'dan itibaren şu uygulamaları destekleyecek işlevler sunar: birden fazla pencere modunda çalışabilir.

Çoklu pencere modunda devre dışı özellikler

Android, çoklu pencere modunda geçerli olmayan özellikleri devre dışı bırakabilir veya yoksayabilir Cihaz ekranını diğer etkinlikler veya uygulamalarla paylaşan bir etkinliğe

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

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

Çoklu pencere modu sorguları ve geri çağırmalar

Activity sınıfı, çoklu pencere özelliğini desteklemek için aşağıdaki yöntemleri sunar. mod:

  • isInMultiWindowMode(): Etkinliğin şurada olup olmadığını gösterir: Çoklu pencere moduna geçiyorum.

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

  • onMultiWindowModeChanged(): etkinlik çoklu pencere moduna girer veya bu moddan çıkar. Sistem, yöntemi geçer Etkinlik çoklu pencere moduna giriyorsa true değerini, etkinlik için false (yanlış) değerini etkinlik, çoklu pencere modundan çıkıyor.

  • onPictureInPictureModeChanged(): Sistem her zaman bu yöntemi çağırır etkinlik pencere içinde pencere moduna girer veya bu moddan çıkar. Sistem etkinlik pencere içinde pencere moduna giriyorsa true değerini yöntem etkinlik pencere içinde pencere modundan çıkıyorsa mod veya false (yanlış) değerine ayarlayın.

Fragment sınıfı, bu yöntemlerin çoğunun sürümlerini gösterir; örneğin, Fragment.onMultiWindowModeChanged().

Pencere içinde pencere modu

Bir etkinliği pencere içinde pencere moduna almak için şu numarayı arayın: enterPictureInPictureMode() Cihaz şu koşulları karşılıyorsa bu yöntemin etkisi yoktur: pencere içinde pencere modunu desteklemiyor. Daha fazla bilgi için pencere içinde pencere (PIP) özelliğini kullanabilirsiniz.

Çoklu pencere modunda yeni etkinlikler

Yeni bir aktivite başlattığınızda yeni etkinliğin varsa geçerli öğenin yanında gösterilir. Amaç işaretini kullanma FLAG_ACTIVITY_LAUNCH_ADJACENT: Bu, sisteme yeni etkinlik olduğundan emin olun. Böylece iki etkinlik ekranı paylaşır. İlgili içeriği oluşturmak için kullanılan sistemi bunun için elinden geleni yapar, ancak bunun olacağı garanti edilmez.

Cihaz serbest biçim modundaysa ve yeni bir etkinlik başlatıyorsanız şunları yapabilirsiniz: çağırarak yeni etkinliğin boyutlarını ve ekran konumunu belirtin ActivityOptions.setLaunchBounds(). Cihaz yeniden başlatılmadan önce çok pencere modunda değil.

API düzeyi 30 ve daha düşük sürümlerde, bir görev yığınında bir etkinlik başlatırsanız etkinlik, ekrandaki etkinliğin yerini alır ve çoklu pencere alanının tamamını devralır özellikler. Yeni etkinliği Google Play'de ayrı bir pencere olarak bunu 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 bölmesine olanak tanır. yardımcı olur. Uygulamanızın etkinlikleri (tam ekran, yan yana veya yığın halinde) bir XML oluşturarak yapılandırma dosyası oluşturmak veya Jetpack WindowManager API çağrıları yapmak.

Sürükleme ve bırakma

Kullanıcılar bir etkinlikten diğerine veri sürükleyip bırakabilir. ve etkinlikler ekranı paylaşıyor. (Android 7.0'dan önce kullanıcılar yalnızca ve tek bir etkinlik içindeki verileri bırakmalısınız.) Kabul edilme konusunda hızlı bir şekilde destek eklemek için bkz. DropHelper API. Kapsamlı sürükle ve bırak özelliği için Sürükleyip bırakma işlevini etkinleştirme bölümüne bakın.

Birden çok örnek

Her kök etkinliğinin, ayrı bir işlemde yürütülen ve pencerede görüntülenir. Uygulamanızın yeni bir örneğini ayrı bir FLAG_ACTIVITY_NEW_TASK işaretiyle yeni etkinlikler başlatabilirsiniz. Siz çoklu pencere özelliklerinin bazılarıyla birleştirerek yeni pencere için belirli bir konum seçin. Örneğin, bir alışveriş uygulamasında karşılaştırabilirsiniz.

Android 12 (API düzeyi 31), bir etkinliğin iki örneğini başlatmanızı sağlar aynı görev penceresinde yan yana gösterilir.

Kullanıcıların şuradan uygulamanızın başka bir örneğini başlatmasına izin vermek isterseniz görev çubuğuna veya uygulama başlatıcıya basmadan, Başlatıcı Etkinliğinizin android:resizeableActivity="true" özelliğini ayarlar ve şu özelliklere sahip bir başlatma modunu kullanmaz: birden fazla örneği önler. Örneğin, bir singleInstancePerTask etkinliği farklı görevlerde birden çok kez örneklenmek FLAG_ACTIVITY_MULTIPLE_TASK veya FLAG_ACTIVITY_NEW_DOCUMENT ayarlanmış.

Çoklu örneği, list-detail gibi çok panelli bir düzenle karıştırmayın. tek bir içinde çalıştırılan SlidingPaneLayout kullanan bir sunu penceresini kapatın.

Katlanabilir cihazlarda birden fazla örnek ayrı pencerelerde çalışıyorsa durması durumunda bir veya daha fazla örnek arka plana gönderilebilir. anlamına gelir. Örneğin, bir cihazın açılmış olduğunu ve iki uygulama örneği olduğunu varsayalım 2 pencerede açılır. Cihaz katlanmışsa çoğu örnek için pencereleri sığdırmaya çalışmak yerine sonlandırılabilir. ekranda görebilirsiniz.

Çok pencere modu doğrulaması

Uygulamanızın API düzeyi 24 veya üstünü hedefleyip hedeflemediğine bakılmaksızın bunu nasıl yapacağınızı doğrulamanız gerekir. Kullanıcı öğeyi birden fazla pencerede açmaya çalıştığında çoklu pencere modunda davranır modunu açabilirsiniz.

Test cihazları

Android 7.0 (API düzeyi 24) veya sonraki sürümleri çalıştıran cihazlar çoklu pencere modunu destekler.

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

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

Uygulamanız sabit yön bildirmiyorsa şurada başlatmalısınız: Android 7.0 veya sonraki bir sürümü çalıştıran bir cihaz ve uygulamayı yerleştirmeyi deney bölünmüş ekran moduna geçer. Uygulama aşağıdaki durumlarda kullanıcı deneyiminin kabul edilebilir olduğunu doğrulayın: zorla yeniden boyutlandırıldı.

Uygulama sabit bir yön belirtiyorsa uygulamayı sabit bir yöne yerleştirmeyi Çoklu pencere moduna geçiyorum. Bunu yaptığınızda uygulamanın tam ekranda kaldığını doğrulayın yatırım yapmanız önemlidir.

24 ile 30 arasındaki API düzeyleri

Uygulamanız 24 ile 30 arasındaki API düzeylerini hedefliyorsa ve çoklu pencere özelliğini devre dışı bırakmıyorsa desteği, hem bölünmüş ekranda hem de serbest biçimde aşağıdaki davranışı doğrulayın modlar:

  • Uygulamayı tam ekran olarak başlatın ve ardından aşağıdakileri yaparak çoklu pencere moduna geçin: Son aramalar düğmesine uzun basarak. Uygulamanın düzgün bir şekilde geçiş yaptığından emin olun.

  • Uygulamayı doğrudan çoklu pencere modunda başlatın ve uygulamanın düzgün şekilde başlatılır. Bir uygulamayı başlatmak için Son Kullanılanlar düğmesine basın, ardından uygulamanızın başlık çubuğuna uzun basın ve ekranda vurgulanan alanlardan birine sürükleyin.

  • Ekran ayırıcıyı sürükleyerek uygulamanızı bölünmüş ekran modunda yeniden boyutlandırın. Doğrula uygulamanın kilitlenmeden yeniden boyutlandırılmasını ve gerekli kullanıcı arayüzü öğelerinin görünür.

  • Uygulamanız için minimum boyutlar belirlediyseniz, uygulamanın pencere boyutu bu boyutlardan daha küçük olacaktır. Şunları doğrulayın: uygulamayı, belirtilen minimum değerden daha küçük olacak şekilde yeniden boyutlandıramazsınız seçin.

  • Tüm testler aracılığıyla uygulamanızın performansının kabul edilebilir düzeyde olduğunu doğrulayın. Örneğin, adresinden sonra kullanıcı arayüzünü güncellemek için çok uzun bir gecikme olmadığını doğrulayın. Uygulama yeniden boyutlandırıldı.

API düzeyi 31 veya üstü

Uygulamanız API düzeyi 31 veya üstünü ve ana etkinliğin minimum genişliğini hedefliyorsa ve minimum yükseklik, yüksekliğin ilgili boyutlarına eşit veya daha küçük varsa, API düzeyleri 24 için listelenen tüm davranışları kontrol edin ve 30'a kadar.

Test kontrol listesi

Uygulamanızın çoklu pencere modunda performansını doğrulamak için aşağıdakileri deneyin: anlamına gelir. Bu işlemleri hem bölünmüş ekranda hem de serbest biçimde denemelisiniz. modunu kullanın.

  • Çoklu pencere moduna girin ve bu moddan çıkın.

  • Uygulamanızdan başka bir uygulamaya geçin ve uygulamanın davrandığını doğrulayın görünür ancak etkin değilken düzgün bir şekilde. Örneğin, uygulamanız video oynatıyorsa, kullanıcı ekranda gezinirken videonun oynatılmaya devam ettiğini doğrulayın başka bir uygulamayla etkileşime geçmelisiniz.

  • Bölünmüş ekran modundayken ekran ayırıcının yerini değiştirmeyi deneyin. daha büyük ve daha küçük olabilir. Bu işlemleri hem yan yana hem de yukarıda olacak şekilde deneyin emin olun. Uygulamanın kilitlenmediğini doğrulayın. Uygulama, görünür olduğundan ve yeniden boyutlandırma işlemi çok uzun sürmez.

  • Art arda birkaç yeniden boyutlandırma işlemi gerçekleştirin. Uygulamanızın veya bellek sızıntısına neden olmaz. Android Studio'nun Bellek Profil Aracı, uygulamanızın bellek kullanımıyla ilgili bilgiler (bkz. Uygulamanızın belleğini inceleme kullanımı hakkında daha fazla bilgi edinin.

  • Uygulamanızı çeşitli pencere yapılandırmalarında normal bir şekilde kullanabilir ve uygulamanın düzgün şekilde davrandığını doğrular. Metnin okunabilir olduğunu ve Kullanıcı arayüzü öğeleri ile etkileşimde bulunulamayacak kadar küçük değil.

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

24 ile 30 arasındaki API düzeylerinde, android:resizeableActivity="false", uygulamanızı bir cihazda başlatmalısınız ve uygulamayı bölünmüş ekrana ve kullanabilirsiniz. Bunu yaptığınızda uygulamanın tam ekranda kaldığından emin olun yatırım yapmanız önemlidir.

Ek kaynaklar

Android'de çoklu pencere desteği hakkında daha fazla bilgi edinmek için:

ziyaret edin.

Sizin için önerilenler * Not: Bağlantı metni, JavaScript kapalıyken gösterilir * Cihaz uyumluluk modu * Büyük ekranın yeniden boyutlandırılabilirliğini destekler * Yapılandırma değişikliklerini işleme