Ç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.
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 özelliğini 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
veminHeight
Etkinlik, çoklu pencere modunda çalıştırılabilir. EğerresizeableActivity="false"
, uygulamanın çalışması engellendi çoklu pencere modunu kullanabilirsiniz.
Bölünmüş ekran modu
Kullanıcılar, aşağıdakileri yaparak bölünmüş ekran modunu etkinleştirebilir:
- Son Kullanılanlar ekranını açın.
- Bir uygulamayı kaydırarak görünüm içine alın
- Uygulama başlık çubuğundaki 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ı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.
![](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/multi-window-mode/camera.png?authuser=6&hl=tr)
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.
![](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/multi-window-mode/multi-display.png?authuser=6&hl=tr)
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.
![](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/multi-window-mode/keyboard.png?authuser=6&hl=tr)
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"
.
![](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/multi-window-mode/wallpaper.png?authuser=6&hl=tr)
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.
![](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/multi-window-mode/launcher-phone.png?authuser=6&hl=tr)
![](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/multi-window-mode/launcher-display.png?authuser=6&hl=tr)
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:
getCurrentWindowMetrics()
: Şu öğe için birWindowMetrics
nesnesi döndürür: sistemin geçerli pencere durumuna getirin.getMaximumWindowMetrics()
: En büyük değer içinWindowMetrics
değerini döndürür durumu hakkında daha fazla bilgi edinin.
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çinGravity
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 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: operations. 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ürken de düzgün şekilde çalışması gerekir. Ö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:
- Android MultiWindowPlayground örneği
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