Android, yönü veya kullanılabilirlik kısıtlamalarını belirten uygulamalar için bir uyumluluk modu etkinleştirir. Uyumluluk modu, büyük ekranlı cihazlarda ve katlanabilir kapaklı telefonlarda kabul edilebilir uygulama davranışı sağlar ancak bu modda kullanım deneyimi ideal değildir.
Uygulama başına geçersiz kılma, cihaz üreticilerinin kullanıcı deneyimini iyileştirmek veya uygulamaların belirli cihazlarda çalışmamasını önlemek için uygulama davranışını değiştirmesini sağlar.
Referans cihazlar
Aşağıdaki cihazlarda, sıra dışı yapılandırmalar veya uygulamalar tarafından iyi desteklenmeyen yapılandırmalar nedeniyle uygulama başına geçersiz kılma gerekebilir:
- Tabletler: Pixel Tablet gibi bazı tabletlerin doğal yönü yataydır.
Display#getRotation()
Surface.ROTATION_0
değerini döndürdüğünde cihaz doğal yöndedir. UygulamalarROTATION_0
değerinin dikey olduğunu varsayarsa uygulama düzenleri ve kamera önizlemesi cihaz ekranıyla eşleşmeyebilir. - Yatay katlanabilir cihazlar: Pixel Fold gibi bazı katlanabilir cihazlar katlandığında dikey, açıldıklarında ise yatay yöndedir. Uygulamalar, katlanmış cihazın yönü dikey olarak kabul ederse titreme döngüleri veya düzen sorunları oluşabilir.
- Katlanabilir kapaklı telefonlar: Katlanmış kapaklı telefonlar genellikle dikey yöndedir. Ancak katlanmış durumdayken telefonlarda genellikle yatay yönde küçük bir ekran bulunur. Uygulamalar, ekranların farklı yönlerini tanımlamalı ve bunlara uyum sağlamalıdır.
Sık karşılaşılan uyumluluk sorunları
Uygulamalar, uyumluluk sorunlarıyla en çok uygulama yönü kısıtlamaları, yeniden boyutlandırılabilirlik ve en boy oranı kısıtlamaları, kamera önizleme yönünün yanlış ele alınması ve kötüye kullanılan API'ler nedeniyle karşılaşır.
Sinemaskop
Sinemaskop, uygulamayı ekranın ortasına veya büyük ekranlarda kolay erişim için bir kenara yerleştirir. Mat renkler (tek renkli çubuklar veya bulanık duvar kağıdı), uygulamanın yanlarındaki ya da üst ve alt kısmındaki kullanılmayan ekran alanını doldurur.
Cihaz ekranının boyutları ve en boy oranı genellikle çoğu uygulamanın tasarlandığı standart telefonlardan farklı olduğundan, sinemaskop genellikle büyük ekranlı cihazlarda görülür.
Sorun
Uygulama, sabit yönü, sabit en boy oranı veya yeniden boyutlandırılamadığı için tüm ekran yapılandırmalarını desteklemiyor.
Uygulamanın yönünü ve yeniden boyutlandırılabilirliğini kontrol eden yapılandırma ayarları şunlardır:
screenOrientation
: Uygulama için sabit bir yönü belirtir. Uygulamalar,Activity#setRequestedOrientation()
kullanarak çalışma zamanında da yönü ayarlayabilir.resizeableActivity
: Sistemin, uygulamaları farklı boyutlardaki pencerelere sığacak şekilde yeniden boyutlandırıp boyutlandıramayacağını belirtir. Android 11 (API düzeyi 30) ve önceki sürümlerde, uygulamaların çoklu pencere modunu destekleyip desteklemediğini belirtir. Android 12 (API düzeyi 31) ve sonraki sürümlerde, uygulamaların küçük ekranlarda (kompakt pencere boyutu sınıfı) çoklu pencere modunu destekleyip desteklemediğini belirtir. Android 12 ve sonraki sürümlerde uygulamalar, bu ayardan bağımsız olarak büyük ekranlarda (orta veya genişletilmiş pencere boyutu sınıfı) çoklu pencere modunu destekler.maxAspectRatio
: Uygulamanın desteklediği maksimum en boy oranını belirtir. YalnızcaresizeableActivity
değerifalse
olarak ayarlanmış uygulamalarmaxAspectRatio
değerini ayarlayabilir.minAspectRatio
: Uygulamanın desteklediği minimum en boy oranını belirtir. YalnızcaresizeableActivity
değerifalse
olarak ayarlanmış uygulamalarminAspectRatio
değerini ayarlayabilir.
Optimizasyon
Uygulama, tüm cihaz ve çoklu pencere modu ekran yönlerini ve boyutlarını desteklemelidir. Uygulama düzenlerinizden ve uygulama manifest dosyanızdan tüm yön ve sabit en boy oranı kısıtlamalarını kaldırın.
Uyumluluk geçici çözümü
Sabit yönü veya sabit en boy oranına sahip bir uygulama, uygulamanın doğrudan pencere boyutunu veya yönünü desteklemediği bir pencerede çalışıyorsa Android, devamlılığı korumak için uygulamayı sinemaskopa dönüştürür.
Platform, Android 12 (API düzeyi 31) ve 12L (API düzeyi 32) sürümlerinden itibaren sinemaskoplu uygulamalara çeşitli iyileştirmeler uygulamaktadır. Cihaz üreticileri kullanıcı arayüzü iyileştirmelerini uygular. Uygulamanızın bu iyileştirmelerden yararlanması için ek geliştirme yapmanız gerekmez.
Android 12 (API düzeyi 31), cihaz üreticileri tarafından yapılandırılabilir aşağıdaki estetik iyileştirmeleri sunar:
- Yuvarlatılmış köşeler: Uygulama penceresinin köşeleri daha zarif bir görünüme sahiptir.
- Sistem çubuğu şeffaflığı: Uygulamanın üzerine binen durum ve gezinme çubukları yarı şeffaftır. Bu sayede, çubuklardaki simgeler sinemaskop arka plan üzerinde her zaman görülebilir.
- Yapılandırılabilir en boy oranı: Uygulamanın görünümünü iyileştirmek için uygulamanın en boy oranı ayarlanabilir.
12L (API düzeyi 32), aşağıdaki işlevsel iyileştirmeleri ekler:
Yapılandırılabilir konumlandırma: Cihaz üreticileri, büyük ekranlarda uygulamayı ekranın sol veya sağ tarafına yerleştirerek etkileşimi kolaylaştırabilir.
Yeniden başlat düğmesi yeniden tasarlandı: Cihaz üreticileri, boyut uyumluluğu modu için yeniden başlat düğmesine kullanıcıların daha iyi tanıyabileceği yeni bir görünüm verebilir.
Android 13 (API düzeyi 33), sinemaskoplu uygulamayı ekranda konumlandırma veya sinemaskopu bölünmüş ekran moduna dahil etme hakkında bir kullanıcı eğitimi iletişim kutusu ekler:
Boyut uyumluluk modu
Boyut uyumluluğu modu, yeniden başlatma kontrolü içeren sinemaskoptur. Bu kontrol, kullanıcıların uygulamayı yeniden başlatmasına ve ekranı yeniden çizmesine olanak tanır. Android, boyutlandırılamaz olduğu belirlenen uygulamalar için boyut uyumluluğu modunu çağırır. Bir etkinlik, etkinliğin boyutlarıyla uyumlu olmayan bir görüntü kapsayıcısına taşındığında sistem, uygulamayı en az bir boyutta cihaz ekranını dolduracak şekilde yeniden ölçeklendirebilir.
Boyut uyumluluğu modunu tetikleyebilecek cihaz yapılandırma değişiklikleri şunlardır:
- Cihaz döndürme
- Katlanabilir cihazın katlanması veya açılması
- Tam ekran ve bölünmüş ekran görüntüleme modları arasında geçiş yapma
Sorun
Boyut uyumluluğu modu, genellikle yönü veya en boy oranı kısıtlanmış ve yeniden boyutlandırılmayacak şekilde yapılandırılmış (veya sistem tarafından belirlenmiş) etkinlikler için geçerlidir.
Uygulamanız aşağıdaki ölçütlerden herhangi birini karşılıyorsa yeniden boyutlandırılabilir olarak kabul edilir ve boyut uyumluluğu moduna yerleştirilmez:
resizeableActivity="true"
ile yeniden boyutlandırılabilir.- Pencere içinde pencere (PIP) modunu destekler
- Yerleşik
- Cihaz üreticisi tarafından uygulanan uygulama başına
FORCE_RESIZE_APP
geçersiz kılma var mı? (Uygulama tarafından ayarlanan özellikler yoksayılır.)
Uygulamanız bu koşullardan hiçbirini yerine getirmiyorsa boyutu değiştirilemez olarak kabul edilir ve boyut uyumluluğu moduna yerleştirilebilir.
Optimizasyon
Uygulama tüm ekran boyutlarını desteklemelidir. Uygulama manifest'inde <activity>
veya <application>
öğesinin android:resizeableActivity
özelliğini true
olarak ayarlayarak uygulamanızı yeniden boyutlandırılabilir hale getirin. Uygulamanız için duyarlı/uyarlanabilir düzenler tasarlayın. Daha fazla bilgi için Farklı ekran boyutlarını destekleme ve Çok pencereli modu destekleme başlıklı makaleleri inceleyin.
Uyumluluk geçici çözümü
Android, sistem, sinemaskoplu uygulamanın görüntüsünün en az bir boyutta görüntü penceresini dolduracak şekilde yeniden ölçeklendirilerek iyileştirilebileceğini belirlediğinde uygulamayı boyut uyumluluğu moduna yerleştirir. Sistem, uygulama sürecini yeniden oluşturan, etkinliği yeniden oluşturan ve ekranı yeniden çizen bir yeniden başlatma kontrolü gösterir. Ayrıca Süreçlere ve ileti dizilerine genel bakış başlıklı makaleyi de inceleyin.
Titreyen döngüler
Bir uygulama tüm ekran yönlerini desteklemiyorsa yapılandırma değişikliği olduğunda tekrar tekrar yeni yönler isteyebilir. Bu da ekranın titremesine veya uygulamanın sonsuz bir şekilde dönmesine neden olan sonsuz bir döngü oluşturur.
Sorun
Android 12 (API düzeyi 31) ve sonraki sürümlerde cihaz üreticileri, cihazlarını uygulamalar tarafından belirtilen yön kısıtlamalarını yoksayacak ve uyumluluk modlarını zorunlu kılacak şekilde yapılandırabilir. Örneğin, katlanabilir bir cihaz, etkinlik cihazın yatay tablet boyutundaki iç ekranda görüntülendiğinde etkinliğin android:screenOrientation="portrait"
ayarını yoksayabilir.
Bir uygulamanın yönü kısıtlamaları yok sayılırsa uygulama, Activity#setRequestedOrientation()
çağrısını yaparak yönünü programatik olarak ayarlayabilir. Uygulama yapılandırma değişikliklerini yönetmiyorsa çağrı, uygulamanın yeniden başlatılmasını tetikler (Yapılandırma değişikliklerini yönetme bölümüne bakın). Yeniden başlatma işleminden sonra uygulamanın yön kısıtlamaları tekrar yoksayılır, uygulama setRequestedOrientation()
çağrısını tekrarlar, çağrı bir uygulama yeniden başlatmasını tetikler ve bu döngü devam eder.
Bu durumla karşılaşabileceğiniz bir diğer durum da cihaz ekranının doğal yönünün (Android tarafından belirlenen normal yön) yatay olmasıdır (yani cihazın en boy oranı yatayken Display#getRotation()
çağrısı Surface.ROTATION_0
döndürür). Uygulamalar geçmişte Display.getRotation() =
Surface.ROTATION_0
değerinin cihazın dikey yönde olduğu anlamına geldiğini varsayıyordu. Ancak bu her zaman doğru değildir. Örneğin, bazı katlanabilir cihazların iç ekranında ve bazı tabletlerde bu durum geçerli değildir.
Katlanabilir iç ekranda yatay yönde olan bir uygulama, ekran döndürmeyi kontrol edebilir, ROTATION_0
değerini alabilir, cihazın doğal yönünün dikey olduğunu varsayabilir ve uygulama düzenini yeniden yapılandırmak için setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
işlevini çağırabilir. Uygulama yeniden başlatıldıktan sonra (yatay yönde), ekran dönüşünü tekrar kontrol edebilir, ROTATION_0
değerini alabilir, setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
işlevini çağırabilir ve sonsuz döngüye devam edebilir.
Optimizasyon
Uygulamalar aşağıdakileri yapmamalıdır:
- Yönlendirme isteği, ele alınmayan yapılandırma değişiklikleri nedeniyle beklenmedik bir şekilde tetiklenebileceğinden
onCreate()
etkinliğindeActivity#setRequestedOrientation()
ile varsayılan bir yön ayarlayın - Cihazın doğal yönünün (
ROTATION_0
) dikey olduğunu varsayın - Yönlendirmeyi, mevcut pencere boyutuyla ilgili olmayan sinyallere (ör.
Display#getRotation()
,FoldingFeature
varlığı veya desteği sonlandırılmış API'ler) göre ayarlayın.
Uyumluluk geçici çözümü
Android, aşağıdaki durumlarda Activity#setRequestedOrientation()
çağrılarını yoksayar:
Etkinlik, yönteme yapılan önceki bir çağrıdan yeniden başlatılmış veya kamera uyumluluğu için zorla döndürme işlemi etkinleştirilmiştir (aşağıdaki Kamera önizlemesi bölümüne bakın).
Cihaz üreticileri, bu davranışı
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
içeren bir uygulamaya uygulayabilir.Etkinlik bir saniyede ikiden fazla yön isteği gönderdi. Bu, bir döngü oluştuğunu gösterir. Android, döngüdeki iki istek arasından uygulama görüntüleme alanını en üst düzeye çıkaranı kullanır.
Cihaz üreticileri, bu davranışı
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
içeren bir uygulamaya uygulayabilir.
Kamera önizleme
Kamera uygulamalarının kamera önizlemesi (veya vizörü), tabletlerde, dizüstü bilgisayarlarda ve katlanabilir ekranlarda yanlış hizalanabilir veya bozuk olabilir.
Sorun
Android Uyumluluk Tanım Belgesi, kamera görüntü sensörünün "kameranın uzun boyutunun ekranın uzun boyutuyla hizalanacak şekilde yönlendirilmesi GEREKTİĞİNİ" belirtir.
Uygulamalar genellikle cihaz yönünün ve kamera sensörünün dikey olduğunu varsayar. Bu, standart cep telefonlarında makul bir varsayımdır. Ancak tabletlerin ve dizüstü bilgisayarların doğal yönü ile kamera sensörleri yatay olabilir. Ayrıca katlanabilir cihazlar gibi yeni form faktörlerinde birden fazla doğal yön ve farklı yönlerde birden fazla kamera sensörü bulunabilir.
Bir etkinliği uygulamanın beklemediği bir kamera yönü ile başlatmak veya farklı kameralar ya da cihaz ekranları (katlanabilir cihazlar için) arasında geçiş yapmak, kamera önizlemesinin yanlış hizalanmasına veya bozulmasına neden olabilir.
Optimizasyon
Kamera uygulamaları, doğru hizalanmış ve ölçeklendirilmiş bir kamera önizlemesi sunmak için cihaz yönünü ve kamera sensörü yönünü doğru şekilde tanımlayıp yönetmelidir. Uygulamalar, cihaz dönüşünü, sensör dönüşünü ve ekran veya pencere en boy oranını hesaplamalı, ardından sonuçları kamera önizlemesine uygulamalıdır. Ayrıntılı bilgi için Kamera önizlemesi ve Kamera vizörüne giriş başlıklı makaleleri inceleyin.
Uyumluluk geçici çözümü
Display#getRotation()
Surface.ROTATION_0
döndürüldüğünde cihaz doğal yöndedir. Sistem, CameraCharacteristics.SENSOR_ORIENTATION
değerini cihazın doğal yönelimine göre hesaplar. Android, dikey olarak kısıtlanmış uygulamaların dikey penceresini cihazın doğal yönüyle hizalar. Bu, çoğu uygulamanın beklediği şeydir. Android, sensör yönü yatay ve kamera önizlemesi dikey olduğunda kamera sensörü görüntüsünü de kırpar. Belirli geçici çözümler şunlardır:
Dikey yönde kullanıma kısıtlanmış uygulamalar için kamera önizlemelerini zorla döndürme: Dikey yönde kullanıma kısıtlanmış uygulamalar, cihazın doğal yönünün ve kamera sensörünün yönünün dikey olmasını bekler. Ancak Android 12 (API düzeyi 31) ve sonraki sürümlerde, cihaz üreticileri yön spesifikasyonunu yoksayarsalar uygulamalar birden fazla cihaz yönünde çalışabilir.
Kameraya dikey olarak kısıtlanmış bir uygulama bağlandığında Android, uygulama dikey penceresini cihazın doğal yönüyle hizalamak için uygulamayı zorla döndürür.
Bazı tabletlerde (referans cihazlara bakın), uygulamanın dikey penceresi, cihazın doğal yönüyle uyumlu olması için tam ekran dikey olarak döndürülür. Zorunlu döndürme işleminden sonra uygulama tam ekranı kaplıyor.
Katlanabilir cihazların yatay iç ekranında (referans cihazlara bakın), yalnızca dikey etkinlikler, katlanmış cihazın doğal yönü ile uyumlu olması için yatay olarak döndürülür. Uygulama, zorunlu döndürme işleminden sonra sinemaskopa alınır.
İç ön kamera kırpma: Bazı katlanabilir cihazlardaki iç ön kamera sensörü yatay yöndedir. Android, katlanabilir iç ekranda kamera önizlemesini zorla döndürmenin yanı sıra sensörün cihaz yönünün tersine bir görüntü yakalaması için iç ön (yatay) kameranın görüş alanını kırpar.
Kamera önizlemelerini zorla yenileme: Sistem, kamera önizlemesinin düzgün şekilde gösterilmesini sağlamak için zorla döndürme işleminden sonra
onStop()
veonStart()
(varsayılan olarak) veyaonPause()
veonResume()
(OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE uygulama başına geçersiz kılma özelliği tarafından uygulanır) etkinlik yöntemleri arasında geçiş yapar.En boy oranı ölçeklendirme: Sistem, zorla döndürülen kamera önizlemesinin en boy oranını dinamik olarak daha yüksek bir minimum en boy oranına değiştirir. Bu sayede kamera önizlemesi düzgün şekilde ölçeklendirilir.
Uygulama geliştiriciler, kamera önizlemesini doğru şekilde ele alıyorlarsa bu geçici çözümleri geçersiz kılabilir. Uygulama başına geçersiz kılma bölümüne bakın.
Yaygın olarak kötüye kullanılan API'ler
Android, çoklu pencere modu ve katlanabilir cihazlar gibi özellikler için destek ekledikçe eski API'lerin desteği sonlandırıldı ve tüm ekran boyutları ve cihaz form faktörleri için çalışan güncel API'lerle değiştirildi. Ancak desteği sonlandırılan API'ler geriye dönük uyumluluk için kullanılabilir durumdadır.
Bazı View
API'leri, geliştiriciler tarafından her zaman tam olarak anlaşılmayan özel amaçlar için tasarlanmıştır.
Sorun
Geliştiriciler, desteği sonlandırılmış Display
API'lerini kullanmaya devam ediyor ve API'lerin cihaz ekran alanı sınırları yerine uygulama sınırlarını döndürdüğünü yanlış bir şekilde varsayıyor. Geliştiriciler genel görüntüleme metriklerini almak için yanlışlıkla özel amaçlı görüntüleme API'lerini kullanabilir.
Sonuç olarak, uygulama penceresi yeniden boyutlandırıldıktan sonra kullanıcı arayüzü öğeleri yeniden konumlandırılırken yanlış hesaplamalar yapılıyor ve düzen sorunları ortaya çıkıyor.
Desteği sonlandırılan ve yaygın olarak yanlış kullanılan Görüntülü Reklam API'leri:
Daha fazla bilgi için Çoklu pencere modunu destekleme başlıklı makaleyi inceleyin.
Yanlış kullanılan görüntüleme API'leri:
Optimizasyon
Kullanıcı arayüzü öğelerini konumlandırmak için hiçbir zaman fiziksel ekran boyutuna güvenmeyin. Uygulamanızı aşağıdaki WindowManager
API'leri de dahil olmak üzere WindowMetrics
tabanlı API'lere taşıyın:
Platform:
Jetpack:
Uyumluluk geçici çözümü
Desteği sonlandırılmış Display
API'leri ve kötüye kullanılan View
API'leri, uygulama sınırlarını döndürmek için iki geçersiz kılma ile ayarlanır: Display
API'leri için ALWAYS_SANDBOX_DISPLAY_APIS
, View
API'leri için OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
. ALWAYS_SANDBOX_DISPLAY_APIS
, boyut uyumluluğu moduna uygun uygulamalara da varsayılan olarak uygulanır.
Şeffaf etkinlikler
Şeffaf etkinlikler, şeffaf arka plan stillerinin sonucudur. Örneğin:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
Theme.MaterialComponents.Dialog
gibi iletişim kutularıyla ilgili temalar, etkinlikleri şeffaf hale getiren stiller içerebilir.
Şeffaf etkinlikler, mevcut ekran alanının tamamını kapsamaz. Mevcut ekran alanı, cihazın döndürülmesi, katlanması ve açılması ve çoklu pencere modu gibi yapılandırma değişikliklerine bağlı olarak değişebileceğinden, bu etkinliklerin yönetimi zordur.
Sorun
Şeffaf bir etkinlik, görev etkinliği yığınındaki şeffaf etkinliğin altındaki ilk opak etkinliğin sınırlarına uygun olmalıdır. Ancak izin iletişim kutusunu başlatan opak bir etkinlik trampoline (başka bir etkinliği başlatıp kaybolan bir etkinlik) olabilir. Bu nedenle sistem, şeffaf izin iletişim kutusu etkinliğini başlatan trampoline etkinliğinin sınırlarını belirleyemez.
Optimizasyon
Şeffaf etkinlikler, kısıtlamalarını bir görevin etkinlik yığınındaki en üstteki opak etkinlikten devralır. Saydam olmayan etkinlik, etkinlik oluşturma işleminden silme işlemine kadar şeffaf etkinliğin tüm yaşam döngüsü boyunca kullanılabilir olmalıdır. Bu nedenle, atlama tahtası etkinliklerinden izin istekleri başlatmayın.
Bir trambolin etkinliği izin isteği başlatırsa kullanıcı, trambolin etkinliği kullanıcının iletişim kutusuna yanıt verme şansı bulamadan önce kaldırılacağı ve iletişim kutusu etkinliğinin boyutları ile konumu yanlış hesaplanmış olabileceği için izin iletişim kutusunu göremeyebilir.
Uygulamalar, kullanıcı izin kararı verene kadar görünür durumda kalan etkinliklerden her zaman izin isteği başlatmalıdır.
Yuvarlatılmış köşeler
Bir etkinlik, arka plan şeffaflığını belirten bir stil nedeniyle veya etkinliğin içeriği mevcut ekran alanını doldurmadığı için şeffaf olabilir. Şeffaf bir etkinlik mevcut ekran alanını dolduruyorsa sistem, cihaz üreticisi tarafından yapılandırıldığı şekilde etkinliğe otomatik olarak yuvarlatılmış köşeler uygular. Ancak şeffaf bir etkinlik (izin iletişim kutusu gibi) mevcut alanı doldurmuyorsa yuvarlatılmış köşeler uygulayıp uygulamamaya karar vermek size aittir.
İzin iletişim kutuları, kullanılabilir ekran alanını doldurmaz. Bunun nedeni, iletişim kutusu düzeninin genellikle LayoutParams.MATCH_PARENT yerine LayoutParams.WRAP_CONTENT kullanmasıdır.
Uyumluluk geçici çözümü
Kullanıcı iletişim kutusuna yanıt verene kadar iletişim kutusu etkinlikleri başlatan etkinlikleri görünür durumda tutun.
Sistem, şeffaf bir etkinliğin aşağıdakiler dahil olmak üzere etkinlik yığınındaki şeffaf etkinliğin altındaki ilk opak etkinlikten tüm kısıtlamaları devralmasını sağlar:
- Boyut uyumluluk modu
- Yön
- En Boy Oranı
Unity oyunları
Unity oyunları Android'de tam ekran veya çoklu pencere modunda çalışır. Ancak birçok Unity oyunu, uygulama çoklu pencere moduna yerleştirildiğinde odağını kaybeder ve içerik çizmeyi durdurur.
Sorun
Unity, Android'de çoklu pencere modunu desteklemek için Unity 2019.4'e bir Resizable Window
seçeneği ekledi. Ancak ilk uygulama, çoklu pencere modundaki etkinlik yaşam döngüsüne doğru şekilde yanıt vermedi. Bu da UnityPlayer'ın, uygulama odağını kaybettiğinde oynatmayı askıya almasına neden oldu. Oynatıcı, siyah ekran veya oyunun donmuş son karesini oluşturdu. Oyun yalnızca kullanıcı ekrana dokunduğunda devam etti. Unity motorunu kullanan birçok uygulama bu sorunla karşılaşır ve çoklu pencere modunda siyah bir pencere olarak oluşturulur.
Optimizasyon
Unity'yi 2019.4.40 veya sonraki bir sürüme yükseltin ve oyununuzu yeniden dışa aktarın. Android Oynatıcı ayarlarında Resizable Window
seçeneğini işaretli tutun. Aksi takdirde, oyun çoklu pencere modunda tamamen görünür olsa bile odakta olmadığında duraklatılır.
Uyumluluk geçici çözümü
Cihaz üreticileri, çoklu pencere modundaki bir uygulamaya sahte bir odaklanma etkinliği sağlamak için uygulama başına OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
geçersiz kılma işlemi uygulayabilir. Geçersiz kılma işlemi, etkinliğin içeriği yeniden çizmesini ve karartılmamasını sağlar.
Uygulamanızı uyumluluk sorunları açısından test etme
Uygulamanızı test etmek ve farklı form faktörlerinde nasıl davrandığını anlamak için aşağıdaki kaynaklardan yararlanın:
- Cihaz aktarımı: Uygulamanızı Google veri merkezlerinde barındırılan üretim cihazlarında (referans cihazlar dahil) test etmek için Firebase tarafından desteklenen Android cihaz aktarımı başlıklı makaleyi inceleyin.
- Android Studio Hedgehog'da emülatörler: Referans cihazlar için emülatör oluşturma hakkında bilgi edinmek istiyorsanız Sanal cihaz oluşturma ve yönetme başlıklı makaleyi inceleyin.
- Android Studio'nun boyutlandırılabilir emülatörü: Sanal cihazlara erişme hakkında bilgi edinmek için Android Emülatör'de uygulama çalıştırma başlıklı makaleyi inceleyin.
Sinemaskop
Her etkinliğin, uygulamanın kullanabileceği tüm ekran alanını kullanabildiğini doğrulayın. Öncelikle test klasörünüzde aşağıdaki kodu tanımlayın:
Kotlin
fun Activity.isLetterboxed() : Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
Java
public boolean isLetterboxed(Activity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds() Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
Ardından, davranışı doğrulamak ve hedef etkinliğin sinemaskop olmadığından emin olmak için bir test çalıştırın:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
İdeal olarak, bu tür bir testi yalnızca başarılı olana ve uygulamanızın etkinliklerinin uygulamanın kullanabileceği ekran alanının tamamını kapladığına dair beyan verene kadar çalıştırın. Tutarlı bir davranış sağlamak için uygulamanızı tüm cihaz türlerinde test edin.
Uygulamaya özgü geçersiz kılmalar
Android, uygulamaların yapılandırılmış davranışını değiştiren geçersiz kılma işlemleri sağlar. Örneğin, FORCE_RESIZE_APP
geçersiz kılma, sistemden boyut uyumluluk modunu atlamasını ve uygulama manifestinde resizeableActivity="false"
belirtilmiş olsa bile uygulamayı görüntü boyutlarına sığacak şekilde yeniden boyutlandırmasını ister.
Cihaz üreticileri, belirli büyük ekranlı cihazlardaki belirli uygulamaları veya tüm uygulamaları geçersiz kılar. Android 14 (API düzeyi 34) ve sonraki sürümlerde kullanıcılar, cihaz ayarları üzerinden uygulamalara geçersiz kılma uygulayabilir.
Uygulama başına kullanıcı geçersiz kılma işlemleri
Android 14 ve sonraki sürümlerde, kullanıcılar ayarlar menüsünden uygulamaların en boy oranını değiştirebilir. Referans cihazlar gibi büyük ekranlı cihazlar menüyü uygular.
Menüde, cihaza yüklü tüm uygulamaların listesi yer alır. Kullanıcılar bir uygulama seçip uygulamanın en boy oranını 3:4, 1:1, tam ekran veya cihaz üreticisi tarafından yapılandırılan başka bir değere ayarlar. Kullanıcılar, en boy oranını uygulama manifestinde belirtilen uygulama varsayılanına da sıfırlayabilir.
Uygulamalar aşağıdaki PackageManager.Property
etiketlerini ayarlayarak uyumluluk geçersiz kılma özelliğini devre dışı bırakabilir:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
Kullanıcı en boy oranı uyumluluğu geçersiz kılma özelliğini devre dışı bırakmak için özelliği uygulamanızın manifest dosyasına ekleyin ve değeri
false
olarak ayarlayın:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
Uygulamanız, cihaz ayarlarındaki uygulamalar listesinden çıkarılır. Kullanıcılar, uygulamanın en boy oranını geçersiz kılamaz.
Mülkün
true
olarak ayarlanmasının hiçbir etkisi yoktur.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
Kullanıcı en boy oranı uyumluluğu geçersiz kılma özelliğinin tam ekran seçeneğini devre dışı bırakmak için mülkü uygulama manifest dosyanıza ekleyin ve değeri
false
olarak ayarlayın:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
Tam ekran seçeneği, cihaz ayarlarındaki en boy oranı seçenekleri listesinden kaldırıldı. Kullanıcılar, tam ekran geçersiz kılma özelliğini uygulamanıza uygulayamaz.
Bu özelliğin
true
olarak ayarlanmasının bir etkisi yoktur.
Uygulamanızı tüm ekranlar için optimize edin: Uygulamanızda en boy oranı kısıtlamaları belirlemeyin. Mevcut ekran alanının miktarına göre farklı düzenleri desteklemek için pencere boyutu sınıflarını kullanın.
Uygulama başına cihaz üreticisi geçersiz kılma işlemleri
Cihaz üreticileri, belirli cihazlarda uygulama bazında geçersiz kılma işlemi uygular. Referans cihazlar, bazı geçersiz kılma işlemlerini varsayılan olarak çeşitli uygulamalara uygulayabilir.
Uygulamalar, geçersiz kılma işlemlerinin çoğunu devre dışı bırakabilir (Aşağıdaki Uygulama başına geçersiz kılma işlemleri tablosuna bakın).
Uyumluluk çerçevesini kullanarak uygulamanızı geçersiz kılma işlemleri etkin veya devre dışıyken test edebilirsiniz (Uyumluluk çerçevesi araçları bölümüne bakın). Etkinleştirildiğinde, geçersiz kılma işlemleri uygulamanın tamamı için geçerli olur.
Ayrıca, geçersiz kılma işlemlerini etkinleştirmek veya devre dışı bırakmak ve uygulamanız için hangi geçersiz kılma işlemlerinin geçerli olduğunu belirlemek üzere Android Debug Bridge'i (adb) kullanabilirsiniz.
Geçersiz kılma işlemlerini aşağıdaki şekilde etkinleştirin veya devre dışı bırakın:
adb shell am compat enable/disable <override name/id> <package>
Referans cihazlar için uygulamanız için hangi geçersiz kılma işlemlerinin geçerli olduğunu kontrol edin:
adb shell dumpsys platform_compat | grep <package name>
Aşağıdaki tabloda, mevcut geçersiz kılma işlemlerinin yanı sıra uygulamanızın geçersiz kılma işlemlerine ihtiyaç duymaması için nasıl optimize edileceğine dair bilgiler verilmiştir. Bazı geçersiz kılma işlemlerini devre dışı bırakmak için uygulama manifest dosyanıza mülk işaretleri ekleyebilirsiniz.
Uygulamaya özgü geçersiz kılmalar | |||
---|---|---|---|
Tür | Ad | Kimlik | Açıklama |
Tabanı değiştirilebilir | FORCE_RESIZE_APP | 174042936 | Yapılandırmaya yönelik değişikliklerde uygulama için boyut uyumluluğu modunu atlar. |
FORCE_NON_RESIZE_APP | 181136395 | Yapılandırmaya ilişkin değişikliklerde uygulamayı boyut uyumluluk moduna zorlar. | |
En boy oranı | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | Diğer en boy oranı geçersiz kılma işlemlerinin uygulanması için etkinleştirilmesi gereken Gatekeeper geçersiz kılma. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | Etkinleştirilirse (varsayılan) sınırlar, kapsamı yalnızca dikey etkinlikler olarak geçersiz kılar. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | Minimum en boy oranını 3:2 olarak değiştirir. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | Minimum en boy oranını 16:9 olarak değiştirir. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | Minimum en boy oranını, ekran boyutunun% 50'sine (veya bölünmüş ekran en boy oranına) sığacak şekilde değiştirir. | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | Cihaz dikey olduğunda uygulamaların tam ekran olması için minimum en boy oranı geçersiz kılınmasını devre dışı bırakır. | |
Yön | OVERRIDE_ANY_ORIENTATION | 265464455 | Tüm yönleri geçersiz kılmayı sağlar. |
OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | Yön, yeniden boyutlandırılabilirlik ve en boy oranı kısıtlamalarını geçersiz kılar. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | Bir etkinliğin yönü tanımlanmamışsa yönü dikey olarak geçersiz kılar. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | Bir etkinliğin yönü tanımlanmamışsa yönü nosensor (cihazın doğal yönünü kullan) olarak geçersiz kılar. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | Yalnızca yatay uygulamaları 180 derece döndürür. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | Yönlendirme geçersiz kılma kapsamını, uygulamanın kameraya bağlı olduğu zamanla sınırlar. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | Bir görev tam ekran olduğunda (kenarlıklı olduğunda dahil) ekranı sabit yatay doğal yöne ayarlar. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | Döndürme sonsuz döngülerini önlemek için uygulamadan gelen yön isteklerini yoksayar. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | Bir etkinlik yeniden başlatılırken tekrarlanan yön istekleri yoksayılır. Android, bir uygulamanın bir saniye içinde en az iki yeni yön istediğini algılarsa sistem bunu sonsuz döngü olarak değerlendirir ve geçersiz kılma işlemini uygular. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | Cihaz üreticisi yönü yoksayma isteği ayarını devre dışı bırakarak sinemaskopu önler. | |
Sandbox API'leri | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | Görüntülü reklam API'lerinin davranışının değiştirilmesini engeller. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | Uygulamadaki Display API'lerinin uygulama sınırlarını döndürmesini zorunlu kılar. Display API'leri mantıksal görüntü alanı sınırlarını döndürür ancak bazen uygulama, Display API'lerinin uygulama sınırlarını döndürdüğünü varsayar. Bu da kullanıcı arayüzü sorunlarına yol açar. |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | Uygulamada kullanılan View API'lerinin uygulama sınırlarını döndürmesini zorunlu kılar. View API'leri mantıksal görüntü alanı sınırlarını döndürür ancak bazen uygulama, View API'lerinin uygulama sınırlarını döndürdüğünü varsayar. Bu da kullanıcı arayüzü sorunlarına yol açar. |
|
Kamera uyumluluğu | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | Zorunlu rotasyonu kapatır. Varsayılan olarak, kamera önizlemesi açıkken sabit yönü olan tüm kamera uygulamaları zorla döndürülür. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | Kamera önizlemesi zorla döndürüldüğünde uygulanan varsayılan sert yenilemeyi kaldırır. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | Kamera önizlemesi zorla döndürüldüğünde sert yenilemeyi yumuşak yenilemeye geçirir. Bu, zorla döndürme sırasında durumun korunmasına yardımcı olur. Android, kamera önizlemesi zorla döndürüldüğünde varsayılan olarak sert yenileme uygular. Zor yenileme, uygulamaların önceki durumlarını nasıl önbelleğe aldığına bağlı olarak uygulamaların durumunu kaybetmesine veya kararmasına neden olabilir. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | İç ön kameranın resim arabelleğini kırpar. Geçersiz kılma devre dışı bırakılırsa iç ön kamera kırpma kaldırılır ve kamera önizlemesinin görüş alanı artırılır. Bazı katlanabilir cihazlarda (referans cihazlara bakın) sistem varsayılan olarak, iç ön kamera kullanılırken tüm kamera uygulamalarının kamera önizlemesini kırpar. | |
Çeşitli | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | Bölünmüş ekran modunda odak kaybolduğunda uygulamanın karartılmasını önler. Uygulama, uygulama içeriğini çizmeden önce odaklanmayı bekler. Bu durum uygulamanın donmasına veya kararmasına neden olabilir. Geçersiz kılma, Android'in uygulamaya sahte bir odaklanma etkinliği göndermesini sağlar. Bu etkinlik, uygulamaya içeriği tekrar çizmeye başlaması gerektiğini bildirir. |
FORCE_RESIZE_APP
Geçersiz kılma işleminin uygulandığı paketlerin yeniden boyutlandırılabilir olmasını sağlar. Uygulamanın çoklu pencere moduna alınabilmesini değiştirmez ancak ekran boyutu değiştiğinde uygulamanın boyut uyumluluk moduna girmeden yeniden boyutlandırılmasına olanak tanır.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
Uygulama manifestinde android:resizeableActivity
özelliğini true
olarak ayarlayın veya android:resizeableActivity=false
ile çoklu pencere modunu devre dışı bırakırken yeniden boyutlandırmayı desteklemek için android.supports_size_changes
meta veri işaretini true
olarak ayarlayın.
Uygulamaları optimize etme
Uygulamaların tüm ekran boyutlarına ve en boy oranlarına uyum sağlamasını sağlamak için duyarlı/uyarlanabilir düzenler kullanın. Farklı ekran boyutlarını destekleme başlıklı makaleyi inceleyin.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak ve uygulamayı yeniden boyutlandırılabilir hale getirmek için:
adb shell am compat enable FORCE_RESIZE_APP <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable FORCE_RESIZE_APP <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
FORCE_NON_RESIZE_APP
Geçersiz kılma işleminin uygulandığı paketlerin boyutunun değiştirilemez olmasını ve yapılandırma değişikliklerinde boyut uyumluluğu moduna girmesini zorunlu kılar.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
Uygulama manifest'inde hem android:resizeableActivity
özelliğini hem de android.supports_size_changes
meta veri işaretini false
olarak ayarlayın ve bir yön veya en boy oranı kısıtlaması beyan edin.
Uygulamaları optimize etme
Boyutu değiştirildiğinde iyi çalışan tüm uygulamalarda android:resizeableActivity
veya android.supports_size_changes
değeri true
olarak ayarlanmalıdır.
Diğer uygulamalar, yeniden boyutlandırıldığında düzgün çalışacak şekilde iyileştirilmelidir. android:resizeableActivity özelliğine bakın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak ve uygulamayı yeniden boyutlandırılamaz hale getirmek için:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_MIN_ASPECT_RATIO
Belirli bir minimum en boy oranını zorunlu kılan tüm geçersiz kılma işlemlerinin kapısı.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
android:minAspectRatio
değerini etkinlik veya uygulama düzeyinde ayarlayın.
Uygulamaları optimize etme
Uygulamanızda en boy oranı kısıtlamaları belirlemeyin. Uygulamanızın farklı ekran boyutlarını desteklediğinden emin olun. Uygulamanızın ekrandaki alan miktarına göre farklı düzenleri desteklemek için pencere boyutu sınıflarını kullanın. WindowSizeClass
API'si oluşturma ve WindowSizeClass
API'sini görüntüleme başlıklı makaleleri inceleyin.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
En boy oranı kısıtlaması belirtin veya PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
Yalnızca dikey yönde olan etkinlikler için belirli bir minimum en boy oranını zorunlu kılan uygulama ayarlarını kısıtlar. Varsayılan olarak etkindir ve yalnızca OVERRIDE_MIN_ASPECT_RATIO
de etkinse geçerli olur.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Uygulamaları optimize etme
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
Etkinliğin minimum en boy oranını orta bir değere (3:2) ayarlar.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Uygulamaları optimize etme
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
Etkinliğin minimum en boy oranını büyük bir değere (16:9) ayarlar
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Uygulamaları optimize etme
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
Bölünmüş ekran en boy oranının kullanılabilmesini sağlar. Uygulamanın, sinemaskop etkisini önlemek için bölünmüş ekran modunda mevcut alanın tamamını kullanmasına izin verir.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Uygulamaları optimize etme
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
Mevcut ekran alanının tamamını kullanmak için dikey tam ekranda minimum en boy oranı geçersiz kılma özelliğini devre dışı bırakır.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Uygulamaları optimize etme
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
OVERRIDE_MIN_ASPECT_RATIO konusuna bakın.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_ANY_ORIENTATION
Aşağıdaki geçersiz kılma işlemlerinin tüm yönleri geçersiz kılmasına olanak tanır:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
activity:screenOrientation
manifest özelliğini ayarlayın veya Activity#setRequestedOrientation()
API'yi kullanın.
Uygulamaları optimize etme
Uygulamanız tüm yönleri desteklemelidir. Yönlendirme değişikliği, iki şekilde yönetilebilen bir yapılandırma değişikliğidir: Sistemin uygulamayı silip yeniden oluşturmasına izin verme veya yapılandırma değişikliklerini kendiniz yönetme. Yapılandırma değişikliklerini kendiniz yönetiyorsanız ViewModel
kullanılarak uygulama durumu korunabilir. Çok sınırlı durumlarda, yalnızca küçük ekranlarda yönü kilitlemeye karar verebilirsiniz. Ancak bu, kullanıcının uygulamayı gerektiği gibi döndürmesine izin vermek kadar iyi sonuç vermeyebilir. Android 12L ve sonraki sürümlerde sabit yön, cihaz yapılandırması tarafından geçersiz kılınabilir. Yapılandırma değişikliklerini işleme ve tüm yönleri destekleme hakkında daha fazla bilgi için Yapılandırma değişikliklerini işleme, ViewModel'e genel bakış ve Uygulama yönü, telefonlarda kısıtlanmış ancak büyük ekranlı cihazlarda kısıtlanmamış başlıklı makaleleri inceleyin.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_ANY_ORIENTATION_TO_USER
Uygulamanın kullanılabilir ekran alanını doldurmasına olanak tanır. Uygulama manifestinde belirtilen tüm yön, kullanılabilirlik ve en boy oranı kısıtlamalarını geçersiz kılar. Ayrıca Activity#setRequestedOrientation()
numarasına yapılan aramaları da yoksayar.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
android:screenOrientation
manifest özelliğini ayarlama veya özelliği"user"
olarak ayarlamaandroid:resizeableActivity
manifest özelliğinitrue
olarak ayarlayın.Küçük ekranlarda,
android:resizeableActivity=false
ile çoklu pencere modunu devre dışı bırakırken uygulama boyutlandırmasını desteklemek içinandroid.supports_size_changes
meta veri işaretinitrue
olarak ayarlayın.minAspectRatio
vemaxAspectRatio
'yi ayarlamayın.
Uygulamaları optimize etme
Uygulamanızın tüm yönleri desteklemesini sağlayın; uygulamanızın manifest dosyasında screenOrientation
özellik belirlemeyin. Uygulamanızın manifest dosyasında android:resizeableActivity
özelliğini true
olarak ayarlayarak uygulamanın yeniden boyutlandırılabilirliğini, çoklu pencere modunu ve tüm ekran en boy oranlarını destekleyin. Farklı ekran boyutlarını destekleme başlıklı makaleyi inceleyin.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
Paketteki tüm etkinlikler için dikey yönü etkinleştirir. OVERRIDE_ANY_ORIENTATION etkinleştirilmedikçe, geçersiz kılma yalnızca etkinlik tarafından başka sabit bir yön belirtilmediğinde kullanılır.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Uygulamaları optimize etme
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
Paketteki tüm etkinlikler için nosensor yönünü etkinleştirir. OVERRIDE_ANY_ORIENTATION etkinleştirilmediği sürece, geçersiz kılma yalnızca etkinlik tarafından başka bir sabit yön belirtilmediğinde kullanılır.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Uygulamaları optimize etme
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
Paketteki tüm aktiviteler için reverseLandscape yönünü etkinleştirir. OVERRIDE_ANY_ORIENTATION etkinleştirilmediği sürece, geçersiz kılma yalnızca etkinlik tarafından başka bir sabit yön belirtilmediğinde kullanılır.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Uygulamaları optimize etme
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Geçersiz kılma ayarını düzenlemek için mülk işaretleri
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR ve OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE parametrelerinin geçersiz kılınmasını sınırlar. Bu geçersiz kılınmalar yalnızca kamera bağlantısı etkin olduğunda geçerli olur.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Uygulamaları optimize etme
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
Aşağıdaki koşullar karşılandığında ekran yönünü yatay doğal yönde göstermekle sınırlar:
- Etkinlik tam ekranda
- Kapsam dışında bırakma bileşen özelliği
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
etkin değil - Cihaz üreticisi, ekran için yönü yoksayma isteği ayarını etkinleştirmiştir
- Ekranın doğal yönü yataytır.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
Geçerli değil. Sorun, uygulama mantığında çözülmelidir.
Uygulamaları optimize etme
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
Uygulama yeniden başlatılırken veya etkin bir kamera uyumluluğu işlemi varsa uygulamanın Activity#setRequestedOrientation()
çağrısına yanıt olarak uygulama yönünü güncellemeyi atlayan uyumluluk politikasını etkinleştirir.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
mülk işaretini true
olarak ayarlayın.
Uygulamaları optimize etme
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Üzeri yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
Bir etkinlik sabit yön için sinemaskoplu değilse uygulamanın Activity#setRequestedOrientation()
çağrısını bir saniye içinde iki defadan fazla yapmasına yanıt olarak uygulamanın istenen yönünü yok sayan uyumluluk politikasını etkinleştirir.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
Geçerli değil. Sorun, uygulama mantığında çözülmelidir.
Uygulamaları optimize etme
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
Paketleri, cihaz üreticileri tarafından bir ekran alanı veya ekranın tamamı için etkinleştirilebilecek yönü yoksayma isteği davranışından hariç tutar.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
Geçerli değil. Sorun, uygulama mantığında çözülmelidir.
Uygulamaları optimize etme
OVERRIDE_ANY_ORIENTATION
adresine göz atın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
Bu özelliği devre dışı bırakmak mümkün değildir. Uygulama, cihaz üreticisi yön isteğini yoksayma ayarının etkin olduğu bir cihazla uyumlu değilse geçersiz kılma özelliğini devre dışı bırakmak tehlikeli olabilir. Geçersiz kılma işlemini devre dışı bırakmak için Android Geliştirici İlişkileri ile iletişime geçin.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
Bu geçersiz kılma işlemi için mülk işareti yok.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
NEVER_SANDBOX_DISPLAY_APIS
Paketlerin, sinemaskop veya boyut uyumluluk modu etkinliği için hiçbir zaman Display
API korumalı alanını uygulamasını zorunlu kılar. Display
API'leri, görüntüleme alanı sınırlarını sağlamaya devam eder.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
android:resizeableActivity
manifest özelliğini true
veya android.supports_size_changes
meta veri işaretini true
olarak ayarlayarak etkinlikleri yeniden boyutlandırılabilir olarak tanımlayın.
Uygulamaları optimize etme
Tamamen yeniden boyutlandırılabilir olduğunu beyan eden uygulamalar, kullanıcı arayüzü öğelerini konumlandırmak için hiçbir zaman ekran boyutuna güvenmemelidir. Uygulamanızı, WindowMetrics
sağlayan güncel API'lere taşıyın. Jetpack Compose kullanıyorsanız kullanıcı arayüzünü, uygulamanın mevcut ekranda ne kadar ekran alanına sahip olduğuna göre çizmek için WindowSizeClass
API'sinden yararlanın. Pencere boyutu sınıflarını kullanma başlıklı makaleyi inceleyin.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
Bu özelliği devre dışı bırakmak mümkün değildir. Kullanımdan kaldırılan API'lerden geçiş yapın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
Bu geçersiz kılma işlemi için mülk işareti yok.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
ALWAYS_SANDBOX_DISPLAY_APIS
Pencere modundan bağımsız olarak paketlerin her zaman Display
API korumalı alanına sahip olmasını zorunlu kılar. Display
API'leri her zaman uygulama sınırlarını sağlar.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
android:resizeableActivity
özelliğini false
veya android.supports_size_changes
meta veri işaretini false
olarak ayarlayarak etkinliklerin boyutunun değiştirilemeyeceğini belirtin.
Uygulamaları optimize etme
Tamamen yeniden boyutlandırılabilir olduğunu beyan eden uygulamalar, kullanıcı arayüzü öğelerini konumlandırmak için hiçbir zaman ekran boyutuna güvenmemelidir. Uygulamanızı, desteği sonlandırılan API'lerden WindowMetrics
sağlayan güncel API'lere taşıyın. WindowMetricsCalculator
adresine göz atın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
Bu özelliği devre dışı bırakmak mümkün değildir. Kullanımdan kaldırılan API'lerden geçiş yapın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
Bu geçersiz kılma işlemi için mülk işareti yok.
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
Paketleri, aşağıdaki View
API'lerini etkinlik sınırlarına göre korumalı alana yerleştirmeye zorlar:
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
Cihaz ekranının sınırları ve cihaz ekranına göre ofsetler yerine uygulama penceresinin sınırlarını ve uygulama penceresine göre ofsetleri sağlayan API'leri kullanarak uygulama kodundaki sorunu çözün.
Uygulamaları optimize etme
Uygulamalar, uygulamaya uygulanabilecek sinemaskop ve çoklu pencere modu olasılığını göz önünde bulundurarak View
API'lerini kullanmalıdır. WindowMetricsCalculator
bölümüne bakın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
Zorunlu rotasyonu devre dışı bırakır. Bazı uygulamalarda kullanıcı deneyimini iyileştirir.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
mülk işaretini false
olarak ayarlayın.
Uygulamaları optimize etme
Önbelleğe alınan kamera sensörü yönüne veya cihaz bilgilerine güvenmeyin. Kamera uyumluluğuyla ilgili bilgi için Kamera vizörü kullanıma sunuluyor ve Kamera uygulamanızda yeniden boyutlandırılabilir yüzeyleri destekleme başlıklı makaleleri inceleyin.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
mülk işaretini true
olarak ayarlayın.
Geçersiz kılma ayarını düzenlemek için mülk işaretleri
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
Geçersiz kılma testini yapmak için adb komutları
Zorunlu döndürmeyi kaldıran geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Zorunlu rotasyonun yapılmasına izin veren geçersiz kılma işlemini kaldırmak için:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
Zorunlu döndürme işleminden sonra etkinlik yenilemeyi devre dışı bırakır. Yenileme, uygulamalarda durum kaybına neden olduğunda kullanıcı deneyimini iyileştirir.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
mülk işaretini false
olarak ayarlayın.
Uygulamaları optimize etme
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION özelliğine bakın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
mülk işaretini true
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
Geçersiz kılma testini yapmak için adb komutları
Etkinlik yenilemeyi kaldıran geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Etkinliğin yenilenmesine izin veren geçersiz kılma işlemini kaldırmak için:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
Kamera uyumluluğu zorla döndürüldükten sonra, uygulandığı paketlerin etkinlik yenileme işlemini onResume()
→
onStop()
→ onResume()
yerine onResume()
→ onPause()
→ onResume()
döngüsü kullanarak yapmasını sağlar.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
mülk işaretini true
olarak ayarlayın.
Uygulamaları optimize etme
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION özelliğine bakın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
Dikey kamera yönü doğal cihaz yönüyle hizalanmadığında kamera çıkışının ters yönde kırpılmasını zorlar. Birçok uygulama bu durumu ele almaz ve aksi takdirde gerilmiş resimler gösterir.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
mülk işaretini true
olarak ayarlayın.
Uygulamaları optimize etme
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION özelliğine bakın.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
Geçersiz kılma testini yapmak için adb komutları
İç ön kamera kırpma işlemini uygulayan geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
İç ön kamera kırpma özelliğini kaldıran geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
Uygulamaların uygulama ekran paylaşımını devre dışı bırakmasını engeller (Medya yansıtma bölümüne bakın). Uygulamalar, tam ekran yakalamayı zorlamak ve tam ekran modunda yakalanan ancak uygulama ekranı paylaşımında yakalanmayan bildirimlerin içeriğini ve pencere modundan bağımsız olarak tüm uygulamaları göstererek kullanıcı gizliliğini tehlikeye atmak için createConfigForDefaultDisplay()
API'yi kötüye kullandığında uygulanır.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
Pencere modundan bağımsız olarak kullanıcıların tam ekranı mı yoksa tek bir uygulama penceresini mi paylaşacağına karar vermesini sağlayan varsayılan medya yansıtma davranışına (Android 14, API düzeyi 34'te createScreenCaptureIntent()
ile uygulanır) izin verin. Dilerseniz createConfigForUserChoice()
çağrısından döndürülen bir MediaProjectionConfig
bağımsız değişkeniyle createScreenCaptureIntent(MediaProjectionConfig)
çağrısı da yapabilirsiniz.
Uygulamaları optimize etme
Kullanıcıların, medya yansıtma sırasında cihaz ekranının tamamını mı yoksa bir uygulama penceresini mi paylaşacaklarını seçmesine izin verin. Bu, Android 14'ten itibaren varsayılan davranıştır.
Çoklu pencere modunu desteklemek için uygulamanızı yeniden boyutlandırılabilir hale getirin (resizeableActivity="true"
).
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
Kullanıcı gizliliğinin önemi nedeniyle uygulamanız bu geçersiz kılma işlemini devre dışı bırakamaz veya devre dışı bırakmayı seçemez.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
Yok.
Geçersiz kılma testini yapmak için adb komutları
Uygulamanın kısmi ekran paylaşımını devre dışı bırakma ayarını iptal eden (yani kısmi ekran paylaşımını etkinleştiren) geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Uygulamanın kısmi ekran paylaşımını devre dışı bırakmasına olanak tanıyan geçersiz kılma işlemini kaldırmak için:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
Bölünmüş ekran modunda odaklanmayan uygulamalar için sahte odaklanma göndermeyi etkinleştirir. Bazı oyun motorları, uygulamanın içeriğini çizmeden önce odaklanmayı bekler. Bu nedenle, sahte odaklanma, uygulamalar devam ettirildiğinde ve henüz odaklanmamışken karartılı kalmalarını önler.
Uygulamalar, geçersiz kılma ile aynı sonucu nasıl elde edebilir?
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
mülk işaretini true
olarak ayarlayın.
Uygulamaları optimize etme
Uygulamanız birden fazla yönü ve yapılandırma değişikliğini iyi şekilde ele alıyorsa bu sorunu önleyebilirsiniz. Büyük ekran uygulama kalitesi yönergelerini uygulayarak uygulamanızı büyük ekranlara hazırlayın.
Unity oyun motorunu kullanıyorsanız 2019.4.40 veya sonraki bir sürüme geçin ve oyununuzu yeniden dışa aktarın. Android Oynatıcı ayarlarında Resizable Window
seçeneğini işaretli tutun.
Üzeriden yazma özelliğini devre dışı bırakma veya devre dışı bırakma
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
mülk işaretini false
olarak ayarlayın.
Geçersiz kılma ayarını düzenleyecek mülk işaretleri
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
Geçersiz kılma testini yapmak için adb komutları
Geçersiz kılma işlemini uygulamak için:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Geçersiz kılmayı kaldırmak için:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Not: Komutlar, geçersiz kılma işlemini yalnızca geçici olarak uygular veya kaldırır.
Ek kaynaklar
- Büyük ekran uygulama kalitesi yönergeleri
- Temel uygulama kalitesi yönergeleri