Android mengaktifkan mode kompatibilitas untuk aplikasi yang mendeklarasikan orientasi atau batasan perubahan ukuran. Mode kompatibilitas memastikan perilaku aplikasi yang dapat diterima di perangkat layar besar dan ponsel {i>foldable<i} tetapi dengan kegunaan yang kurang optimal.
Penggantian per aplikasi memungkinkan produsen perangkat mengubah perilaku aplikasi untuk meningkatkan pengalaman pengguna atau mencegah aplikasi berhenti berfungsi perangkat tertentu.
Perangkat referensi
Perangkat berikut mungkin memerlukan penggantian per aplikasi karena konfigurasi atau konfigurasi yang tidak didukung dengan baik oleh aplikasi:
- Tablet: Orientasi alami beberapa tablet, seperti Pixel Tablet,
adalah lanskap. Perangkat dalam orientasi naturalnya ketika
Pengembalian sebesar
Display#getRotation()
Surface.ROTATION_0
. Jika aplikasi menganggapROTATION_0
adalah potret, tata letak aplikasi dan pratinjau kamera mungkin tidak cocok dengan tampilan perangkat. - Perangkat foldable lanskap: Beberapa perangkat foldable, seperti Pixel Fold, ada di dalam orientasi potret saat dilipat, tetapi orientasi lanskap saat dibentangkan. Jika aplikasi menganggap orientasi yang dibentangkan adalah potret, berkedip masalah loop atau tata letak.
- Ponsel lipat yang dapat dilipat: Ponsel lipat yang dibentangkan biasanya dalam mode potret orientasi. Tapi, ketika dilipat, ponsel biasanya memiliki layar kecil di orientasi lanskap. Aplikasi harus mengidentifikasi dan mengakomodasi orientasi layar.
Masalah kompatibilitas umum
Aplikasi sering mengalami masalah kompatibilitas karena orientasi aplikasi pembatasan, perubahan ukuran dan batasan rasio aspek, penanganan yang salah orientasi pratinjau kamera, dan API yang disalahgunakan.
Tampilan Lebar
Tampilan lebar memosisikan aplikasi di bagian tengah layar atau, di perangkat layar besar, ke satu sisi untuk akses yang mudah. Matte (batang berwarna solid atau wallpaper buram) mengisi area tampilan yang tidak digunakan di sepanjang sisi atau atas dan bagian bawah aplikasi.
Tampilan lebar sering terjadi di perangkat layar besar karena dimensi dan rasio aspek layar perangkat biasanya berbeda dari ponsel, yang desainnya sebagian besar aplikasinya.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/letterboxing.png?authuser=19&hl=id)
Gambar 1. Aplikasi yang dibatasi untuk orientasi potret memiliki tampilan lebar pada tablet lanskap dan perangkat foldable.
Masalah
Aplikasi tidak mendukung semua konfigurasi tampilan karena aplikasi telah memperbaiki orientasi layar, rasio aspek tetap, atau tidak dapat diubah ukurannya.
Setelan konfigurasi yang mengontrol orientasi dan respons aplikasi mencakup berikut ini:
screenOrientation
: Menentukan orientasi tetap untuk aplikasi. Aplikasi juga bisa menyetel orientasi saat runtime menggunakanActivity#setRequestedOrientation()
.resizeableActivity
: Menunjukkan apakah sistem dapat mengubah ukuran aplikasi agar sesuai dengan jendela dengan berbagai dimensi. Di Android 11 (level API 30) dan yang lebih rendah, menentukan apakah aplikasi mendukung mode multi-aplikasi. Aktif Android 12 (level API 31) dan yang lebih tinggi, menentukan apakah aplikasi mendukung mode multi-aplikasi di layar kecil (ringkas class ukuran jendela). Di Android 12 dan yang lebih tinggi, aplikasi mendukung mode multi-aplikasi di perangkat layar besar (jendela sedang atau yang diperluas ) terlepas dari setelan ini.maxAspectRatio
: Menentukan rasio aspek maksimum didukung oleh aplikasi. Hanya aplikasi denganresizeableActivity
yang disetel kefalse
yang dapat setelmaxAspectRatio
.minAspectRatio
: Menentukan rasio aspek minimum didukung oleh aplikasi. Hanya aplikasi denganresizeableActivity
yang disetel kefalse
yang dapat setelminAspectRatio
.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/letterboxing_issue.png?authuser=19&hl=id)
Aplikasi yang dibatasi untuk orientasi potret saja tidak dapat digunakan di perangkat lanskap.
Pengoptimalan
Aplikasi harus mendukung semua perangkat dan tampilan mode multi-aplikasi orientasi dan ukuran. Hapus semua orientasi dan rasio aspek tetap batasan dari tata letak aplikasi dan file manifes aplikasi Anda.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/letterboxing_optimization.png?authuser=19&hl=id)
Aplikasi mendukung semua orientasi perangkat.
Solusi kompatibilitas
Jika aplikasi dengan orientasi tetap atau rasio aspek tetap berjalan di jendela tempat aplikasi tersebut tidak secara langsung mendukung ukuran atau orientasi jendela, Android memberikan tampilan lebar pada aplikasi untuk menjaga kontinuitas.
Mulai Android 12 (level API 31) dan berlanjut dengan 12L (level API 32), platform menerapkan berbagai peningkatan untuk aplikasi dengan tampilan lebar. Perangkat produsen menerapkan peningkatan UI. Anda tidak perlu melakukan tindakan pengembangan aplikasi Anda agar dapat memperoleh manfaat dari peningkatan tersebut.
Android 12 (level API 31) memperkenalkan peningkatan estetika berikut, yang dapat dikonfigurasi oleh produsen perangkat:
- Sudut bulat: Sudut jendela aplikasi memiliki tampilan yang lebih sempurna.
- Transparansi kolom sistem: Status bar dan menu navigasi, yang menempatkan bersifat semi transparan, membuat ikon pada bilah selalu dapat dilihat di atas latar belakang tampilan lebar.
- Rasio aspek yang dapat dikonfigurasi: Rasio aspek aplikasi dapat disesuaikan untuk meningkatkan tampilan aplikasi.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/enhanced_letterboxing.png?authuser=19&hl=id)
Gambar 2. Aplikasi tampilan lebar dengan peningkatan UI.
12L (level API 32) menambahkan peningkatan fungsional berikut:
Posisi yang dapat dikonfigurasi: Di perangkat layar besar, produsen perangkat dapat posisikan aplikasi ke sisi kiri atau kanan layar, sehingga interaksi yang lebih mudah.
Tombol mulai ulang yang didesain ulang: Produsen perangkat dapat memulai ulang perangkat untuk mode kompatibilitas ukuran guna mendapatkan tampilan baru untuk pengenalan yang lebih baik oleh pengguna.
Android 13 (level API 33) menambahkan dialog edukasi pengguna tentang pemosisian aplikasi dengan tampilan lebar di layar atau menyertakan tampilan lebar dalam mode layar terpisah:
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/enhanced_letterboxing_user_dialog.png?authuser=19&hl=id)
Gambar 3. Aplikasi tampilan lebar dengan dialog edukasi pengguna.
Mode kompatibilitas ukuran
Mode kompatibilitas ukuran adalah tampilan lebar yang menyertakan kontrol mulai ulang. Tujuan memungkinkan pengguna memulai ulang aplikasi dan menggambar ulang tampilan. Pemanggilan Android mode kompatibilitas ukuran untuk aplikasi yang ditentukan untuk tidak dapat diubah ukurannya. Jika aktivitas berpindah ke penampung tampilan yang tidak kompatibel dengan aktivitas dimensi, sistem dapat menskalakan ulang aplikasi untuk mengisi layar perangkat dengan setidaknya satu dimensi.
Perubahan konfigurasi perangkat yang dapat memicu mode kompatibilitas ukuran mencakup hal berikut:
- Rotasi perangkat
- Melipat atau membuka lipatan perangkat foldable
- Beralih antara mode tampilan layar penuh dan layar terpisah
Masalah
Mode kompatibilitas ukuran biasanya berlaku untuk aktivitas yang dibatasi dalam orientasi atau rasio aspek dan dikonfigurasi (atau ditentukan oleh sistem) untuk tidak dapat diubah ukurannya.
Aplikasi Anda dianggap dapat diubah ukurannya—dan tidak akan ditempatkan dalam ukuran mode kompatibilitas—jika memenuhi salah satu kriteria berikut:
- Dapat diubah ukurannya dengan
resizeableActivity="true"
- Mendukung mode picture-in-picture (PIP)
- Disematkan
- Memiliki penggantian per aplikasi
FORCE_RESIZE_APP
yang diterapkan oleh produsen perangkat (properti yang ditetapkan oleh aplikasi diabaikan)
Jika aplikasi Anda tidak memenuhi salah satu kondisi tersebut, aplikasi dianggap tidak dapat diubah ukurannya dan dapat ditempatkan dalam mode kompatibilitas ukuran.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/size_compatibility_mode_issue.gif?authuser=19&hl=id)
Aplikasi yang tidak dapat diubah ukurannya mengalami error dalam mode multi-aplikasi.
Pengoptimalan
Aplikasi harus mendukung semua ukuran tampilan. Buat aplikasi Anda dapat diubah ukurannya dengan menetapkan
Atribut android:resizeableActivity
dari <activity>
atau elemen <application>
ke true
di
manifes aplikasi. Desain tata letak responsif/adaptif untuk aplikasi Anda. Untuk selengkapnya
informasi, lihat
Mendukung berbagai ukuran layar dan Dukungan
mode multi-aplikasi.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/size_compatibility_mode_optimization.gif?authuser=19&hl=id)
Aplikasi berfungsi di semua ukuran jendela.
Solusi kompatibilitas
Android menempatkan aplikasi dalam mode kompatibilitas ukuran ketika sistem menentukan tampilan aplikasi tampilan lebar dapat ditingkatkan dengan mengubah skala aplikasi untuk mengisi jendela tampilan dalam minimal satu dimensi. Sistem menampilkan kontrol mulai ulang yang membuat ulang proses aplikasi, membuat ulang aktivitas, dan menggambar ulang tampilan. Lihat juga Ringkasan proses dan thread.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/size_compatibility_mode_workaround.gif?authuser=19&hl=id)
Aplikasi khusus potret dengan tampilan lebar dalam orientasi lanskap diubah skalanya dengan kontrol mulai ulang.
Loop berkedip
Jika tidak mendukung semua orientasi tampilan, aplikasi mungkin berulang kali meminta orientasi baru ketika terjadi perubahan konfigurasi, sehingga tanpa henti yang membuat layar berkedip atau aplikasi berputar tanpa henti.
Masalah
Di Android 12 (level API 31) dan yang lebih baru, produsen perangkat dapat mengonfigurasi
perangkat mereka untuk mengabaikan batasan orientasi yang ditentukan oleh aplikasi dan
menerapkan mode kompatibilitas. Misalnya, perangkat foldable bisa mengabaikan
android:screenOrientation="portrait"
aktivitas
pengaturan saat aktivitas ditampilkan pada
ukuran tablet lanskap di perangkat,
layar dalam.
Jika batasan orientasi aplikasi diabaikan, aplikasi dapat secara terprogram
mengatur orientasinya
dengan memanggil
Activity#setRequestedOrientation()
Panggilan
memicu mulai ulang aplikasi jika aplikasi tidak menangani perubahan konfigurasi (lihat
Menangani perubahan konfigurasi). Setelah
{i>restart<i}, batasan orientasi aplikasi akan diabaikan lagi, aplikasi akan diulang
panggilan ke setRequestedOrientation()
, panggilan tersebut memicu mulai ulang aplikasi, dan
seterusnya dalam loop yang terus-menerus.
Cara lain yang mungkin Anda
temui adalah ketika
orientasi alami (orientasi biasa yang
ditentukan oleh Android) pada layar perangkat adalah lanskap (yaitu, memanggil
Display#getRotation()
pengembalian
Surface.ROTATION_0
saat perangkat memiliki aspek lanskap
rasio). Secara historis, aplikasi mengasumsikan bahwa Display.getRotation() =
Surface.ROTATION_0
berarti perangkat dalam orientasi potret, tetapi tidak
selalu ada, misalnya, di layar dalam
beberapa perangkat foldable dan
di beberapa tablet.
Aplikasi dalam orientasi lanskap pada layar dalam perangkat foldable, dapat memeriksa
rotasi layar, menerima nilai ROTATION_0
, mengasumsikan orientasi alami
perangkat dalam mode potret, dan panggil
setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
untuk mengonfigurasi ulang tata letak aplikasi. Setelah aplikasi dimulai ulang (dalam mode lanskap
orientasi), perangkat mungkin memeriksa kembali rotasi layar, menerima nilai
ROTATION_0
, telepon
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
dan
melanjutkan loop tanpa henti.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/flickering_loops_issue.gif?authuser=19&hl=id)
Aplikasi khusus lanskap pada tampilan potret melakukan panggilan berulang ke Activity#setRequestedOrientation()
.
Pengoptimalan
Aplikasi tidak boleh melakukan hal berikut:
- Setel orientasi default dengan
Activity#setRequestedOrientation()
di metodeonCreate()
aktivitas karena permintaan orientasi dapat dipicu secara tiba-tiba oleh perubahan konfigurasi yang tidak tertangani - Asumsikan bahwa orientasi alami perangkat (
ROTATION_0
) adalah potret - Setel orientasi berdasarkan sinyal yang tidak terkait dengan ukuran jendela saat ini seperti
sebagai
Display#getRotation()
, keberadaanFoldingFeature
, atau API yang tidak digunakan lagi.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/flickering_loops_optimization.gif?authuser=19&hl=id)
Aplikasi menangani perubahan konfigurasi, tidak memiliki batasan orientasi, sehingga tidak memasuki loop yang berkedip.
Solusi kompatibilitas
Android mengabaikan panggilan ke Activity#setRequestedOrientation()
dalam hal berikut
situasi:
Aktivitas telah diluncurkan kembali dari panggilan sebelumnya ke metode atau perlakuan putar paksa kompatibilitas kamera telah diaktifkan (lihat Kamera pratinjau di bawah).
Produsen perangkat dapat menerapkan perilaku ini ke aplikasi dengan
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
Aktivitas ini membuat lebih dari dua permintaan orientasi dalam satu detik, yang menunjukkan telah terjadi loop. Dari dua permintaan di loop, Android menggunakan yang memaksimalkan area tampilan aplikasi.
Produsen perangkat dapat menerapkan perilaku ini ke aplikasi dengan
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
Pratinjau kamera
Pratinjau kamera (atau jendela bidik) aplikasi kamera mungkin tidak selaras atau terdistorsi di tablet, laptop, dan layar perangkat foldable.
Masalah
Compatibility Definition Document Android menyatakan bahwa sensor gambar kamera "HARUS diorientasikan sehingga dimensi panjang kamera sesuai dengan dimensi panjang layar.“
Aplikasi sering menganggap bahwa orientasi perangkat dan orientasi sensor kamera potret—asumsi yang masuk akal pada ponsel standar. Tapi orientasi alami tablet dan laptop beserta sensor kameranya dapat lanskap. Selain itu, faktor bentuk baru seperti perangkat foldable dapat memiliki orientasi dan beberapa sensor kamera dalam berbagai orientasi.
Memulai aktivitas dengan orientasi kamera yang tidak diharapkan aplikasi atau beralih antara kamera atau layar perangkat yang berbeda (untuk perangkat foldable) dapat menyebabkan pratinjau kamera yang tidak selaras atau terdistorsi.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/camera_preview_issue.png?authuser=19&hl=id)
Pratinjau kamera yang tidak selaras dan terdistorsi pada perangkat foldable layar besar.
Pengoptimalan
Aplikasi kamera harus mengidentifikasi dan mengelola orientasi perangkat dan kamera dengan benar orientasi sensor untuk menyajikan pratinjau kamera yang diselaraskan dan diskalakan dengan benar. Aplikasi harus menghitung rotasi perangkat, rotasi sensor, dan layar atau jendela rasio aspek, lalu terapkan hasilnya ke pratinjau kamera. Untuk detail panduan, lihat Pratinjau kamera dan Memperkenalkan Kamera Jendela bidik.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/camera_preview_optimization.png?authuser=19&hl=id)
Pratinjau kamera diselaraskan dan diskalakan dengan benar di semua orientasi perangkat.
Solusi kompatibilitas
Perangkat dalam orientasi alami saat Display#getRotation()
akan menampilkan Surface.ROTATION_0
. Sistem menghitung
CameraCharacteristics.SENSOR_ORIENTATION
dari orientasi alami perangkat. Android menyejajarkan jendela potret
aplikasi yang dibatasi untuk potret dengan orientasi alami perangkat,
sesuai dengan harapan sebagian besar aplikasi. Android juga memangkas gambar sensor kamera saat
orientasi sensor adalah lanskap dan pratinjau kamera adalah potret. Tujuan
solusinya meliputi berikut ini:
Paksa putar pratinjau kamera untuk aplikasi yang dibatasi untuk potret: dibatasi untuk orientasi potret, gunakan orientasi alami perangkat dan orientasi sensor kamera adalah potret. Namun, di Android 12 (API level 31) dan yang lebih tinggi, aplikasi bisa berjalan di beberapa orientasi perangkat jika produsen perangkat mengabaikan spesifikasi orientasi.
Saat aplikasi yang dibatasi untuk potret terhubung ke kamera, Android akan memaksa memutar aplikasi untuk menyejajarkan jendela potret aplikasi dengan orientasi perangkat.
Pada beberapa tablet (lihat perangkat referensi), aplikasi jendela potret diputar ke potret layar penuh agar sejajar dengan orientasi alami perangkat. Aplikasi menempati layar penuh setelah dipaksa kunci.
Tablet — Memutar paksa aplikasi yang dibatasi untuk potret.
Di layar dalam lanskap pada perangkat foldable (lihat referensi perangkat), aktivitas khusus potret akan diputar lanskap agar selaras dengan orientasi alami yang dibentangkan. Aplikasi ini tampilan lebar setelah diputar paksa.
Foldable — Memaksa rotasi aplikasi yang dibatasi untuk potret. Aplikasi ini juga memiliki tampilan lebar.
Pemangkasan kamera depan bagian dalam: Sensor kamera depan bagian dalam pada beberapa perangkat foldable dalam orientasi lanskap. Selain memutar paksa pratinjau kamera di layar dalam perangkat foldable, Android memangkas bagian depan bagian dalam Ruang pandang kamera (lanskap) sehingga sensor menangkap tampilan yang berlawanan orientasi perangkat.
Muat ulang paksa pratinjau kamera: Siklus sistem melalui aktivitas metode
onStop()
danonStart()
(secara default) atauonPause()
danonResume()
(diterapkan oleh OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE penggantian per aplikasi) setelah pemutaran paksa untuk memastikan pratinjau kamera ditampilkan dengan benar.Penskalaan rasio aspek: Sistem secara dinamis mengubah rasio aspek pratinjau kamera yang diputar paksa ke rasio aspek minimum yang lebih tinggi, yang memastikan pratinjau kamera diskalakan dengan benar.
Developer aplikasi dapat mengganti solusi ini jika aplikasi menangani pratinjau kamera dengan benar. Lihat Penggantian per aplikasi.
API yang sering disalahgunakan
Karena Android telah menambahkan dukungan untuk fitur seperti mode multi-aplikasi dan perangkat seperti perangkat foldable, API lama tidak digunakan lagi dan diganti dengan API terbaru yang berfungsi untuk semua ukuran layar dan bentuk perangkat faktor-faktor. Namun, API yang tidak digunakan lagi masih tersedia untuk kompatibilitas mundur.
Beberapa View
API didesain untuk tujuan khusus yang tidak selalu berjalan baik
dipahami oleh developer.
Masalah
Developer terus menggunakan Display
API yang tidak digunakan lagi dan salah mengasumsikan
API menampilkan batas aplikasi, bukan batas area tampilan perangkat. Atau para developer
salah menggunakan API tampilan tujuan khusus untuk mendapatkan metrik tampilan umum.
Hasilnya adalah kesalahan penghitungan saat memosisikan ulang elemen UI setelah jendela aplikasi
mengubah ukuran peristiwa, yang menyebabkan masalah tata letak.
Display API yang tidak digunakan lagi dan umumnya disalahgunakan:
Untuk informasi selengkapnya, lihat Mendukung mode multi-aplikasi.
View API yang disalahgunakan:
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/misused_APIs_issue.png?authuser=19&hl=id)
API yang tidak digunakan lagi salah menghitung batas aplikasi. Konten aplikasi dinonaktifkan di layar.
Pengoptimalan
Jangan pernah mengandalkan ukuran tampilan fisik untuk memosisikan elemen UI. Migrasikan
aplikasi ke API berdasarkan WindowMetrics
, termasuk kode berikut
WindowManager
API:
Platform:
Jetpack:
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/misused_APIs_optimization.png?authuser=19&hl=id)
API menghitung metrik jendela aplikasi dengan benar.
Solusi kompatibilitas
Dua penggantian menyesuaikan Display
API yang tidak digunakan lagi dan View
API yang disalahgunakan untuk
menampilkan batas aplikasi:
ALWAYS_SANDBOX_DISPLAY_APIS
untuk Display
API; OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
untuk View
API. ALWAYS_SANDBOX_DISPLAY_APIS
juga diterapkan secara default ke
yang memenuhi syarat untuk mode kompatibilitas ukuran.
Aktivitas yang transparan
Aktivitas yang transparan adalah hasil dari gaya latar belakang transparan, untuk contoh:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
Tema yang terkait dengan dialog, seperti Theme.MaterialComponents.Dialog
, dapat
menyertakan gaya yang membuat aktivitas transparan.
Aktivitas yang transparan tidak mencakup semua ruang tampilan yang tersedia, sehingga sulit untuk dikelola karena area tampilan yang tersedia dapat berubah berdasarkan perubahan konfigurasi seperti rotasi perangkat, perangkat dilipat dan dibentangkan, dan mode multi-aplikasi.
Masalah
Aktivitas transparan harus sesuai dengan batas aktivitas buram pertama di bawah aktivitas transparan dalam tumpukan aktivitas tugas. Namun, buram yang meluncurkan dialog izin bisa berupa trampolin (aktivitas yang meluncurkan aktivitas lain kemudian menghilang); dan jadi, sistem tidak bisa menentukan batas aktivitas trampolin yang meluncurkan aktivitas dialog izin transparan.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/transparent_activities_issue.png?authuser=19&hl=id)
Dialog salah ditempatkan karena aktivitas diluncurkan dari trampolin.
Pengoptimalan
Aktivitas yang transparan mewarisi batasannya dari lapisan buram paling atas aktivitas di bawahnya dalam tumpukan aktivitas tugas. Aktivitas buram harus tersedia untuk seluruh siklus proses aktivitas transparan, mulai dari aktivitas dari penciptaan hingga kehancuran. Karena alasan ini, jangan luncurkan permintaan izin dari aktivitas trampolin.
Jika aktivitas trampolin meluncurkan permintaan izin, pengguna mungkin tidak bisa melihat dialog izin karena aktivitas trampolin telah dihancurkan sebelum pengguna sempat merespons dialog, dan dimensi dan posisi aktivitas dialog yang mungkin telah dihitung tidak benar.
Aplikasi harus selalu meluncurkan permintaan izin dari aktivitas yang tetap terlihat sampai pengguna membuat keputusan izin.
Sudut membulat
Suatu aktivitas dapat menjadi transparan karena gaya yang menetapkan latar belakang atau karena konten aktivitas tidak mengisi ruang tampilan. Jika aktivitas transparan mengisi ruang tampilan yang tersedia, metode sistem secara otomatis menerapkan sudut lengkung ke aktivitas ketika dikonfigurasi untuk oleh produsen perangkat. Tapi, jika aktivitas transparan (seperti dialog izin) tidak mengisi ruang yang tersedia, terserah Anda untuk memutuskan apakah akan menggunakan sudut tumpul atau tidak.
Dialog izin tidak mengisi ruang tampilan yang tersedia karena dialog tersebut biasanya menggunakan LayoutParams.WRAP_CONTENT, bukan LayoutParams.MATCH_PARENT.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/transparent_activities_optimization.png?authuser=19&hl=id)
Dialog dengan sudut lengkung diposisikan dengan benar di atas aktivitas peluncuran yang terlihat.
Solusi kompatibilitas
Tetap tampilkan aktivitas yang meluncurkan aktivitas dialog hingga pengguna merespons dialog.
Sistem memastikan bahwa aktivitas transparan mewarisi semua batasan dari aktivitas buram pertama di bawah aktivitas transparan dalam tumpukan aktivitas, termasuk batasan yang terkait dengan:
- Mode kompatibilitas ukuran
- Orientasi
- Rasio Aspek
Game Unity
Game Unity berjalan di layar penuh Android atau dalam mode multi-aplikasi. Namun, banyak game Unity kehilangan fokus dan berhenti menggambar konten saat aplikasi ditempatkan mode multi-aplikasi.
Masalah
Unity menambahkan Resizable Window
di Unity 2019.4 untuk mendukung mode multi-aplikasi di Android. Namun,
implementasi awal tidak bereaksi terhadap siklus proses aktivitas pada
mode multi-aplikasi dengan benar, sehingga
UnityPlayer untuk menangguhkan pemutaran saat aplikasi kehilangan fokus. Pemain merender
layar hitam atau periode frozen terakhir di game. Gameplay dilanjutkan hanya saat
pengguna mengetuk layar. Banyak aplikasi yang menggunakan mesin Unity menghadapi masalah ini dan
merender sebagai jendela gelap dalam mode multi-aplikasi.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/unity_games_issue.gif?authuser=19&hl=id)
Game kehilangan fokus dalam mode multi-aplikasi dan merender sebagai jendela gelap.
Pengoptimalan
Upgrade Unity ke versi 2019.4.40 atau yang lebih baru, lalu ekspor ulang game Anda. Tetap
Resizable Window
opsi dicentang di
Setelan Android Player, jika tidak
game berhenti sejenak ketika tidak dalam fokus meskipun game sepenuhnya terlihat di
mode multi-aplikasi.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/unity_games_optimization.gif?authuser=19&hl=id)
Game merender konten dengan benar dalam mode multi-aplikasi bahkan saat tidak dalam fokus.
Solusi kompatibilitas
Produsen perangkat dapat menerapkan
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
penggantian per aplikasi untuk memberikan focus event palsu ke aplikasi di
mode multi-aplikasi. Penggantian memungkinkan aktivitas menggambar ulang konten dan
tidak terhenti.
Uji aplikasi Anda untuk menemukan masalah kompatibilitas
Untuk menguji aplikasi Anda dan memahami perilakunya pada berbagai faktor bentuk, lakukan memanfaatkan referensi berikut:
- Streaming perangkat: Untuk menguji aplikasi Anda di perangkat produksi (termasuk perangkat referensi) yang dihosting di pusat data Google, lihat Streaming Perangkat Android, didukung oleh Firebase
- Emulator di Android Studio Hedgehog: Untuk informasi tentang cara membuat emulator untuk perangkat referensi, lihat Membuat dan mengelola perangkat virtual
- Emulator Android Studio yang dapat diubah ukurannya: Untuk informasi tentang cara mengakses virtual perangkat Anda, lihat Menjalankan aplikasi di Android Emulator
Memiliki tampilan lebar
Pastikan setiap aktivitas bisa menggunakan semua ruang layar yang tersedia untuk aplikasi. Pertama, deklarasikan kode berikut di folder pengujian Anda:
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(); }
Kemudian, jalankan pengujian untuk menyatakan perilaku dan pastikan aktivitas target tidak tampilan lebar:
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(); }); } }
Idealnya, jalankan pengujian semacam ini hanya sampai lulus dan nyatakan bahwa pengujian aktivitas yang memenuhi seluruh ruang tampilan yang tersedia untuk aplikasi. Menguji aplikasi di semua jenis perangkat untuk memastikan perilaku yang konsisten.
Penggantian per aplikasi
Android menyediakan penggantian yang mengubah perilaku aplikasi yang dikonfigurasi. Sebagai
contoh, penggantian FORCE_RESIZE_APP
menginstruksikan
sistem untuk mengabaikan mode kompatibilitas ukuran dan mengubah ukuran aplikasi agar sesuai dengan layar
dimensi meskipun resizeableActivity="false"
adalah
yang ditentukan dalam manifes aplikasi.
Produsen perangkat menerapkan penggantian ke aplikasi tertentu—atau semua aplikasi—di perangkat layar besar tertentu. Di Android 14 (level API 34) dan yang lebih tinggi, pengguna dapat menerapkan penggantian ke aplikasi melalui setelan perangkat.
Penggantian pengguna per aplikasi
Di Android 14 dan yang lebih tinggi, menu setelan memungkinkan pengguna mengubah aspek rasio aplikasi. Perangkat layar besar seperti referensi perangkat menerapkan menu.
Menu berisi daftar semua aplikasi yang diinstal di perangkat. Pengguna memilih aplikasi, lalu setel rasio aspek aplikasi ke 3:4, 1:1, layar penuh, atau nilai lainnya yang dikonfigurasi oleh produsen perangkat. Pengguna juga dapat mengatur ulang rasio aspek ke default aplikasi, yang ditetapkan dalam manifes aplikasi.
Aplikasi dapat memilih untuk tidak mengaktifkan penggantian kompatibilitas dengan menetapkan tag PackageManager.Property
berikut:
PROPERTI_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
Untuk memilih tidak menggunakan penggantian kompatibilitas rasio aspek pengguna, tambahkan properti ke manifes aplikasi Anda dan tetapkan nilai ke
false
:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
Aplikasi Anda akan dikecualikan dari daftar aplikasi di setelan perangkat. Pengguna tidak akan dapat mengganti rasio aspek aplikasi.
Menetapkan properti ke
true
tidak akan berpengaruh.PROPERTI_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
Untuk memilih tidak menggunakan opsi layar penuh kompatibilitas rasio aspek pengguna ganti, tambahkan properti ke manifes aplikasi dan setel nilainya ke
false
:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
Opsi layar penuh dihapus dari daftar opsi rasio aspek di setelan perangkat. Pengguna tidak akan dapat menerapkan penggantian layar penuh ke aplikasi Anda.
Menetapkan properti ini ke
true
tidak akan berpengaruh.
Optimalkan aplikasi untuk semua layar: Jangan tetapkan batasan rasio aspek di aplikasi Anda. Gunakan class ukuran jendela untuk mendukung berbagai tata letak berdasarkan jumlah ruang tampilan yang tersedia.
Penggantian per aplikasi produsen perangkat
Produsen perangkat menerapkan penggantian per aplikasi di perangkat tertentu. Perangkat referensi dapat menerapkan beberapa penggantian ke berbagai aplikasi secara {i>default<i}.
Aplikasi dapat memilih untuk tidak mengaktifkan sebagian besar penggantian (lihat tab Per aplikasi penggantian di bawah).
Anda dapat menguji aplikasi dengan mengaktifkan atau menonaktifkan penggantian menggunakan kompatibilitas framework (lihat Alat framework kompatibilitas). Jika diaktifkan, penggantian akan diterapkan ke seluruh aplikasi.
Anda juga dapat menggunakan Android Debug Bridge (adb) untuk mengaktifkan atau nonaktifkan penggantian dan tentukan penggantian yang diterapkan untuk aplikasi.
Aktifkan atau nonaktifkan penggantian sebagai berikut:
adb shell am compat enable/disable <override name/id> <package>
Untuk perangkat referensi, periksa penggantian mana yang berlaku untuk aplikasi Anda:
adb shell dumpsys platform_compat | grep <package name>
Tabel berikut mencantumkan penggantian yang tersedia beserta panduan tentang cara mengoptimalkan aplikasi Anda sehingga aplikasi tidak perlu mengandalkan penggantian. Anda dapat menambahkan ke manifes aplikasi untuk memilih tidak melakukan beberapa penggantian.
Penggantian per aplikasi | |||
---|---|---|---|
Jenis | Nama | ID | Deskripsi |
Kemampuan untuk berubah ukuran | FORCE_RESIZE_APP | 174042936 | Menghindari mode kompatibilitas ukuran untuk aplikasi saat konfigurasi berubah. |
FORCE_NON_RESIZE_APP | 181136395 | Memaksa aplikasi memasuki mode kompatibilitas ukuran saat konfigurasi berubah. | |
Rasio aspek | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | Penggantian Gatekeeper yang harus diaktifkan untuk menerapkan penggantian rasio aspek lainnya. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | Jika diaktifkan (default), akan membatasi cakupan penggantian ke aktivitas khusus potret. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | Mengubah rasio aspek minimum menjadi 3:2. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | Mengubah rasio aspek minimum menjadi 16:9. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | Mengubah rasio aspek minimum agar sesuai dengan 50% ukuran tampilan (atau rasio aspek layar terpisah). | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | Menonaktifkan penggantian rasio aspek minimum sehingga aplikasi dalam mode layar penuh saat perangkat dalam mode potret. | |
Orientasi | OVERRIDE_ANY_ORIENTATION | 265464455 | Mengaktifkan penggantian orientasi apa pun. |
OVERRIDE_ANY_ORIENTATION_TO_PENGGUNA | 310816437 | Mengganti batasan orientasi, kemampuan mengubah ukuran, dan rasio aspek. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | Mengganti orientasi menjadi potret saat aktivitas memiliki orientasi yang tidak ditentukan. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | Mengganti orientasi menjadi nosensor (menggunakan orientasi alami perangkat) saat aktivitas memiliki orientasi yang tidak ditentukan. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | Memutar aplikasi khusus lanskap 180 derajat. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | Membatasi cakupan penggantian orientasi saat aplikasi terhubung ke kamera. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | Menetapkan tampilan ke orientasi alami lanskap tetap saat tugas dalam mode layar penuh (termasuk dalam tampilan lebar). | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | Mengabaikan permintaan orientasi dari aplikasi untuk menghindari loop rotasi tanpa batas. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | Mengabaikan permintaan orientasi berulang saat aktivitas diluncurkan kembali. Jika Android mendeteksi bahwa aplikasi meminta setidaknya dua orientasi baru dalam satu detik, sistem akan menganggapnya sebagai loop rotasi tanpa batas dan menerapkan penggantian. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | Mencegah tampilan lebar dengan menonaktifkan setelan permintaan orientasi mengabaikan produsen perangkat. | |
Sandbox API | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | Mencegah perubahan perilaku display API. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | Memaksa Display API di aplikasi untuk menampilkan batas aplikasi. Display API menampilkan batas area tampilan logis, tetapi terkadang aplikasi mengasumsikan Display API menampilkan batas aplikasi, yang menyebabkan masalah UI. |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | Memaksa View API yang digunakan dalam aplikasi untuk menampilkan batas aplikasi. View API menampilkan batas area tampilan logis, tetapi terkadang aplikasi mengasumsikan View API menampilkan batas aplikasi, yang menyebabkan masalah UI. |
|
Kompatibilitas kamera | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | Menonaktifkan pemutaran paksa. Secara default, semua aplikasi kamera berorientasi tetap akan diputar paksa saat pratinjau kamera terbuka. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | Menghapus hard refresh default yang diterapkan saat pratinjau kamera diputar paksa. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | Mengalihkan hard refresh ke soft refresh saat pratinjau kamera diputar paksa, yang membantu mempertahankan status selama pemutaran paksa. Secara default, Android menerapkan hard refresh saat pratinjau kamera diputar paksa. Hard refresh dapat menyebabkan masalah pada aplikasi yang kehilangan status atau berhenti berfungsi, bergantung pada cara aplikasi menyimpan status sebelumnya di cache. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | Memangkas buffer gambar di kamera depan bagian dalam. Jika penggantian dinonaktifkan, pemangkasan kamera depan bagian dalam akan dihapus dan ruang pandang pratinjau kamera akan ditingkatkan. Secara default di beberapa perangkat foldable (lihat perangkat referensi), sistem akan memangkas pratinjau kamera dari semua aplikasi kamera saat menggunakan kamera depan bagian dalam. | |
Lain-lain | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | Mencegah aplikasi berhenti berfungsi saat aplikasi kehilangan fokus dalam mode layar terpisah. Aplikasi menunggu fokus sebelum menggambar konten aplikasi, yang dapat menyebabkan aplikasi macet atau berhenti berfungsi. Penggantian memungkinkan Android mengirimkan focus event palsu ke aplikasi, yang memberi sinyal ke aplikasi untuk mulai menggambar konten lagi. |
FORCE_RESIZE_APP
Memaksa paket yang menerapkan penggantian agar ukurannya dapat diubah. Tidak mengubah apakah aplikasi dapat dialihkan ke mode multi-aplikasi, tetapi mengizinkan mengubah ukuran tanpa memasuki mode kompatibilitas ukuran saat layar diubah ukurannya.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Dalam manifes aplikasi, aturlah atribut
android:resizeableActivity
ke true
atau, ke
mendukung pengubahan ukuran saat menonaktifkan mode multi-aplikasi dengan
android:resizeableActivity=false
, setel android.supports_size_changes
flag metadata ke true
.
Cara mengoptimalkan aplikasi
Gunakan tata letak responsif/adaptif agar aplikasi dapat beradaptasi dengan semua ukuran layar dan rasio aspek. Lihat Mendukung berbagai ukuran layar.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tetapkan tanda properti PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
ke
false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian dan membuat ukuran aplikasi dapat diubah:
adb shell am compat enable FORCE_RESIZE_APP <package>
Untuk menghapus penggantian:
adb shell am compat disable FORCE_RESIZE_APP <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
FORCE_NON_RESIZE_APP
Memaksa paket yang menerapkan penggantian agar ukurannya tidak dapat diubah dan masuk ke mode kompatibilitas ukuran saat konfigurasi berubah.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tetapkan atribut android:resizeableActivity
dan
flag metadata android.supports_size_changes
ke false
di manifes aplikasi,
dan mendeklarasikan batasan orientasi atau rasio aspek.
Cara mengoptimalkan aplikasi
Semua aplikasi yang berperilaku baik jika diubah ukurannya harus memiliki
android:resizeableActivity
atau android.supports_size_changes
ditetapkan ke true
.
Aplikasi lain harus ditingkatkan agar berperilaku baik saat diubah ukurannya. Lihat
android:resizeableActivity.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tetapkan tanda properti PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
ke
false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian dan membuat aplikasi tidak dapat diubah ukurannya:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
Untuk menghapus penggantian:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_MIN_ASPECT_RATIO
Gatekeeper untuk semua penggantian yang memaksa rasio aspek minimum tertentu.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tetapkan android:minAspectRatio
di tingkat aktivitas atau aplikasi.
Cara mengoptimalkan aplikasi
Jangan tetapkan batasan rasio aspek di aplikasi Anda. Pastikan aplikasi Anda mendukung
ukuran layar yang berbeda. Menggunakan class ukuran jendela
untuk mendukung tata letak yang berbeda berdasarkan jumlah ruang yang dimiliki aplikasi Anda di
layar. Lihat Compose WindowSizeClass
API
dan Lihat WindowSizeClass
API.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Menentukan batasan rasio aspek atau menetapkan tanda properti
PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
hingga false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
Membatasi setelan aplikasi yang memaksa rasio aspek minimum tertentu untuk aktivitas
dengan orientasi khusus potret. Diaktifkan secara default dan hanya berlaku
jika OVERRIDE_MIN_ASPECT_RATIO
juga diaktifkan.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Tanda properti untuk menyesuaikan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
Menetapkan rasio aspek minimum aktivitas ke nilai sedang (3:2)
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Tanda properti untuk menyesuaikan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
Menetapkan rasio aspek minimum aktivitas ke nilai besar (16:9)
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Tanda properti untuk menyesuaikan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
Mengaktifkan penggunaan rasio aspek layar terpisah. Mengizinkan aplikasi menggunakan semua ruang yang tersedia dalam mode layar terpisah dan menghindari tampilan lebar.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Tanda properti untuk menyesuaikan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
Menonaktifkan penggantian rasio aspek minimum di layar penuh potret untuk menggunakan semua ruang layar yang tersedia.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Tanda properti untuk menyesuaikan penggantian
Lihat OVERRIDE_MIN_ASPECT_RATIO.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_ANY_ORIENTATION
Mengaktifkan penggantian berikut untuk mengganti orientasi apa pun:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Setel atribut manifes activity:screenOrientation
,
atau gunakan Activity#setRequestedOrientation()
API.
Cara mengoptimalkan aplikasi
Aplikasi Anda harus mendukung semua orientasi. Perubahan orientasi adalah
perubahan konfigurasi, yang dapat ditangani dengan
salah satu dari dua cara berikut: membiarkan
sistem menghancurkan dan membuat ulang aplikasi, atau mengelola perubahan konfigurasi
diri Anda sendiri. Jika Anda mengelola perubahan konfigurasi sendiri, status aplikasi dapat
dipertahankan menggunakan ViewModel
. Dalam kasus yang sangat terbatas, Anda
dapat memutuskan untuk mengunci
orientasi layar kecil saja, meskipun hal itu mungkin tidak diskalakan sebaik
memungkinkan pengguna memutar
aplikasi sesuai kebutuhan. Di Android 12L dan versi yang lebih tinggi,
orientasi tetap dapat diganti oleh konfigurasi perangkat. Untuk selengkapnya
informasi tentang penanganan perubahan konfigurasi
dan cara mendukung semua
orientasi, lihat Menangani perubahan konfigurasi,
Ringkasan ViewModel, dan Orientasi aplikasi dibatasi di
ponsel, tetapi tidak di perangkat layar besar.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Menetapkan tanda properti
PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
ke false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_ANY_ORIENTATION_TO_PENGGUNA
Memungkinkan aplikasi mengisi ruang tampilan yang tersedia. Mengganti orientasi apa pun,
perubahan ukuran, dan batasan rasio aspek yang ditentukan dalam manifes aplikasi. Selain itu,
mengabaikan panggilan ke
Activity#setRequestedOrientation()
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Jangan menyetel manifes
android:screenOrientation
atau tetapkan atribut ke"user"
.Menyetel manifes
android:resizeableActivity
ketrue
.Di layar kecil, untuk mendukung perubahan ukuran aplikasi sekaligus menonaktifkan multi-aplikasi mode dengan
android:resizeableActivity=false
, setel atribut Tanda metadataandroid.supports_size_changes
ketrue
. Jangan tetapkanminAspectRatio
danmaxAspectRatio
.
Cara mengoptimalkan aplikasi
Memungkinkan aplikasi Anda mendukung semua orientasi; jangan setel screenOrientation
spesifik dalam manifes aplikasi Anda. Mendukung kemampuan perubahan ukuran aplikasi,
mode multi-aplikasi, dan semua rasio aspek tampilan dengan menyetel
Atribut android:resizeableActivity
dalam manifes aplikasi Anda ke true
. Lihat
Mendukung berbagai ukuran layar.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Tanda properti untuk menyesuaikan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
Mengaktifkan orientasi potret untuk semua aktivitas dalam paket. Kecuali OVERRIDE_ANY_ORIENTATION diaktifkan, penggantian hanya digunakan bila tidak ada orientasi tetap lainnya yang telah ditetapkan oleh aktivitas.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Tanda properti untuk menyesuaikan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
Mengaktifkan orientasi nosensor untuk semua aktivitas dalam paket. Kecuali OVERRIDE_ANY_ORIENTATION adalah diaktifkan, penggantian hanya digunakan saat tidak ada orientasi tetap lainnya yang yang ditentukan oleh aktivitas.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Tanda properti untuk menyesuaikan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
Mengaktifkan orientasi reverseLandscape untuk semua aktivitas di paket tersebut. Kecuali OVERRIDE_ANY_ORIENTATION adalah diaktifkan, penggantian hanya digunakan saat tidak ada orientasi tetap lainnya yang yang ditentukan oleh aktivitas.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Tanda properti untuk menyesuaikan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
Batasan OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, dan OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE penggantian agar hanya diterapkan saat koneksi kamera aktif.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Tanda properti untuk menyesuaikan penggantian
Lihat OVERRIDE_ANY_ORIENTATION
.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
Membatasi orientasi tampilan ke orientasi alami lanskap saat kondisi berikut terpenuhi:
- Aktivitas dalam mode layar penuh
- Memilih tidak menyertakan properti komponen
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
tidak diaktifkan - Setelan permintaan orientasi abaikan produsen perangkat diaktifkan untuk layar
- Orientasi alami tampilan adalah lanskap
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tidak berlaku. Masalah ini harus diselesaikan dalam logika aplikasi.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Menetapkan tanda properti
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
ke false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
Mengaktifkan kebijakan kompatibilitas yang tidak memperbarui orientasi aplikasi sebagai respons terhadap aplikasi
memanggil Activity#setRequestedOrientation()
saat aplikasi
diluncurkan kembali atau memiliki perlakuan kompatibilitas kamera yang aktif.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tetapkan tanda properti
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
ke true
.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tetapkan tanda properti
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
ke false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
Mengaktifkan kebijakan kompatibilitas yang mengabaikan orientasi yang diminta aplikasi di
merespons panggilan aplikasi
Activity#setRequestedOrientation()
lebih dari dua kali
dalam satu detik jika suatu aktivitas tidak dijadikan tampilan lebar untuk orientasi tetap.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tidak berlaku. Masalah ini harus diselesaikan dalam logika aplikasi.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tetapkan tanda properti
PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
hingga
false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
Mengecualikan paket dari perilaku permintaan abaikan orientasi yang dapat diaktifkan oleh produsen perangkat untuk area tampilan atau seluruh layar.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tidak berlaku. Masalah ini harus diselesaikan dalam logika aplikasi.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_ANY_ORIENTATION
.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Opsi ini tidak tersedia. Menonaktifkan penggantian dapat berbahaya jika aplikasi tidak kompatibel dengan perangkat yang membuat produsen perangkat mengabaikan permintaan orientasi mengaktifkan setelan. Menghubungi Android Developer Relations untuk menonaktifkan penggantian.
Tanda properti untuk menyesuaikan penggantian
Tidak ada tanda properti untuk penggantian ini.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
NEVER_SANDBOX_DISPLAY_APIS
Memaksa paket agar tidak pernah menerapkan sandbox Display
API
untuk aktivitas mode kompatibilitas ukuran atau tampilan lebar. Display
API
akan terus menyediakan batas area tampilan.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Deklarasikan aktivitas yang dapat diubah ukurannya dengan menetapkan
Atribut manifes android:resizeableActivity
ke true
atau flag metadata android.supports_size_changes
ke true
.
Cara mengoptimalkan aplikasi
Aplikasi yang mendeklarasikan bahwa sepenuhnya dapat diubah ukurannya tidak boleh bergantung pada ukuran tampilan
untuk memosisikan elemen UI. Migrasikan aplikasi Anda ke API terbaru yang
menyediakan WindowMetrics
. Jika Anda menggunakan Jetpack Compose, manfaatkan
WindowSizeClass
API untuk menggambar UI berdasarkan seberapa banyak ukuran layar
area yang dimiliki aplikasi pada tampilan saat ini. Lihat
Class ukuran jendela.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Opsi ini tidak tersedia. Bermigrasi dari API yang tidak digunakan lagi.
Tanda properti untuk menyesuaikan penggantian
Tidak ada tanda properti untuk penggantian ini.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
Untuk menghapus penggantian:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
ALWAYS_SANDBOX_DISPLAY_APIS
Memaksa paket untuk selalu menerapkan sandbox Display
API
terlepas dari mode windowing. Display
API selalu menyediakan batasan aplikasi.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Deklarasikan aktivitas yang tidak dapat diubah ukurannya dengan menetapkan
atribut android:resizeableActivity
ke false
atau
Flag metadata android.supports_size_changes
ke false
.
Cara mengoptimalkan aplikasi
Aplikasi yang mendeklarasikan bahwa sepenuhnya dapat diubah ukurannya tidak boleh bergantung pada ukuran tampilan untuk
memosisikan elemen UI. Memigrasikan aplikasi dari API yang tidak digunakan lagi ke
API terbaru yang menyediakan WindowMetrics
. Lihat
WindowMetricsCalculator
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Opsi ini tidak tersedia. Bermigrasi dari API yang tidak digunakan lagi.
Tanda properti untuk menyesuaikan penggantian
Tidak ada tanda properti untuk penggantian ini.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Untuk menghapus penggantian:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
Memaksa paket untuk melakukan sandbox View
API berikut ke batasan aktivitas:
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Selesaikan masalah di kode aplikasi dengan menggunakan API yang menyediakan batasan jendela aplikasi dan offset terkait jendela aplikasi, bukan dengan batas-batas tampilan perangkat dan offset terkait tampilan perangkat.
Cara mengoptimalkan aplikasi
Aplikasi harus menggunakan View
API, dengan mempertimbangkan kemungkinan tampilan lebar
dan mode multi-aplikasi yang sedang diterapkan ke aplikasi. Lihat
WindowMetricsCalculator
.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tetapkan tanda properti
PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
ke false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
Menonaktifkan pemutaran paksa. Meningkatkan pengalaman pengguna di beberapa aplikasi.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tetapkan tanda properti
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
ke false
.
Cara mengoptimalkan aplikasi
Jangan bergantung pada orientasi sensor kamera atau informasi perangkat yang di-cache. Sebagai panduan kompatibilitas kamera, lihat Memperkenalkan Jendela Bidik Kamera dan Dukungan platform yang dapat diubah ukurannya di kamera Anda aplikasi.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tetapkan tanda properti
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
ke true
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian, yang menghapus pemutaran paksa:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Untuk menghapus penggantian, yang memungkinkan pemutaran paksa terjadi:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
Menonaktifkan refresh aktivitas setelah pemutaran paksa. Meningkatkan pengalaman pengguna saat refresh menyebabkan hilangnya status di aplikasi.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tetapkan tanda properti
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
ke false
.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tetapkan tanda properti
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
ke true
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian, yang menghapus refresh aktivitas:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Untuk menghapus penggantian, yang memungkinkan refresh aktivitas:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
Membuat paket yang diterapkan untuk melakukan refresh aktivitas menggunakan onResume()
→ onPause()
→ siklus onResume()
, bukan onResume()
→
onStop()
→ onResume()
setelah pemutaran paksa kompatibilitas kamera.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tetapkan tanda properti
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
ke true
.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tetapkan tanda properti
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
ke false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
Memaksa output kamera untuk dipangkas ke orientasi yang berlawanan saat potret orientasi kamera tidak sejajar dengan orientasi perangkat alami. Banyak aplikasi tidak menangani situasi ini dan menampilkan gambar yang direntangkan sebaliknya.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tetapkan tanda properti
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
ke true
.
Cara mengoptimalkan aplikasi
Lihat OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tetapkan tanda properti
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
ke false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian, yang akan menerapkan pemangkasan kamera depan bagian dalam:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Untuk menghapus penggantian, yang akan menghapus pemangkasan kamera depan bagian dalam:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
Mencegah aplikasi menonaktifkan berbagi layar aplikasi (lihat
Proyeksi media). Diterapkan saat aplikasi menyalahgunakan
createConfigForDefaultDisplay()
API untuk memaksa
pengambilan gambar layar penuh dan membahayakan privasi pengguna dengan mengekspos konten
notifikasi, yang diambil dengan layar penuh, tetapi tidak dengan layar aplikasi
berbagi, dan semua aplikasi
terlepas dari mode jendela.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Mengizinkan perilaku proyeksi media default (diimplementasikan di Android 14, API
level 34, dengan createScreenCaptureIntent()
),
yang memungkinkan pengguna memutuskan apakah akan berbagi layar penuh atau satu aplikasi
jendela, terlepas dari mode windowing. Atau telepon
createScreenCaptureIntent(MediaProjectionConfig)
dengan argumen MediaProjectionConfig
yang ditampilkan dari
panggilan ke createConfigForUserChoice()
.
Cara mengoptimalkan aplikasi
Izinkan pengguna memilih apakah akan membagikan seluruh layar perangkat atau aplikasi selama proyeksi media, yang merupakan perilaku default pada Android 14.
Buat aplikasi Anda dapat diubah ukurannya (resizeableActivity="true"
) untuk
mendukung mode multi-aplikasi.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Karena privasi pengguna yang sangat serius, aplikasi Anda tidak dapat menonaktifkan atau memilih tidak ikut dari penggantian ini.
Tanda properti untuk menyesuaikan penggantian
Tidak ada.
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian, yang membatalkan pilihan tidak ikut berbagi layar sebagian pada aplikasi (yaitu, mengaktifkan berbagi layar sebagian):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Untuk menghapus penggantian, yang memungkinkan aplikasi memilih untuk tidak menggunakan layar sebagian berbagi:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
Mengaktifkan pengiriman fokus palsu untuk aplikasi yang tidak difokuskan dalam mode layar terpisah. Agak besar game engine menunggu untuk mendapatkan fokus sebelum menggambar konten aplikasi; dan sebagainya, fokus palsu membantu aplikasi agar tidak berhenti berfungsi saat dilanjutkan dan tidak dan tetap fokus.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tetapkan tanda properti
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
ke
true
.
Cara mengoptimalkan aplikasi
Anda dapat menghindari masalah ini jika aplikasi menangani beberapa orientasi dan konfigurasi berubah dengan baik. Siapkan aplikasi Anda untuk perangkat layar besar dengan mengikuti Panduan Kualitas aplikasi perangkat layar besar.
Jika Anda menjalankan game engine Unity, upgrade ke versi 2019.4.40 atau yang lebih baru dan
mengekspor ulang game Anda. Pertahankan opsi Resizable Window
telah check in di Android Player
setelan.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tetapkan tanda properti
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
ke
false
.
Tanda properti untuk menyesuaikan penggantian
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
Perintah adb untuk menguji penggantian
Untuk menerapkan penggantian:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Untuk menghapus penggantian:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Catatan: Perintah hanya menerapkan atau menghapus penggantian untuk sementara.
Referensi lainnya
- Panduan Kualitas aplikasi perangkat layar besar
- Panduan Kualitas aplikasi inti