Android mengaktifkan mode kompatibilitas untuk aplikasi yang mendeklarasikan batasan orientasi atau kemampuan mengubah ukuran. Mode kompatibilitas memastikan perilaku aplikasi yang dapat diterima di perangkat layar besar dan ponsel flip foldable, tetapi dengan kegunaan yang kurang optimal.
Penggantian per aplikasi memungkinkan produsen perangkat mengubah perilaku aplikasi untuk meningkatkan pengalaman pengguna atau mencegah aplikasi agar tidak rusak di perangkat tertentu.
Perangkat referensi
Perangkat berikut mungkin memerlukan penggantian per aplikasi karena konfigurasi yang tidak biasa atau konfigurasi yang tidak didukung dengan baik oleh aplikasi:
- Tablet: Orientasi alami beberapa tablet, seperti Pixel Tablet,
adalah lanskap. Perangkat dalam orientasi alami saat
Display#getRotation()
menampilkanSurface.ROTATION_0
. Jika aplikasi mengasumsikanROTATION_0
adalah potret, tata letak aplikasi dan pratinjau kamera dapat tidak cocok dengan tampilan perangkat. - Perangkat foldable lanskap: Beberapa perangkat foldable, seperti Pixel Fold, berada dalam orientasi potret saat dilipat, tetapi orientasi lanskap saat dibentangkan. Jika aplikasi mengasumsikan orientasi yang dibentangkan adalah potret, kemungkinan akan terjadi loop berkedip atau masalah tata letak.
- Ponsel lipat foldable: Ponsel lipat yang tidak dilipat biasanya dalam orientasi potret. Namun, saat dilipat, ponsel biasanya memiliki layar kecil dalam orientasi lanskap. Aplikasi harus mengidentifikasi dan mengakomodasi berbagai orientasi layar.
Masalah kompatibilitas umum
Aplikasi sering mengalami masalah kompatibilitas karena batasan orientasi aplikasi, batasan perubahan ukuran dan rasio aspek, penanganan orientasi pratinjau kamera yang salah, dan API yang disalahgunakan.
Tampilan Lebar
Tampilan lebar memosisikan aplikasi di bagian tengah layar atau pada satu sisi atau sisi lainnya di layar besar untuk memudahkan akses. Matte (kolom berwarna solid atau wallpaper buram) mengisi area tampilan yang tidak digunakan di sepanjang sisi atau bagian atas dan bawah aplikasi.
Tampilan lebar sering terjadi di perangkat layar besar karena dimensi dan rasio aspek layar perangkat biasanya berbeda dengan ponsel standar, yang menjadi acuan rancangan sebagian besar aplikasi.
Masalah
Aplikasi tidak mendukung semua konfigurasi tampilan karena aplikasi tersebut memiliki orientasi tetap, rasio aspek tetap, atau tidak dapat diubah ukurannya.
Setelan konfigurasi yang mengontrol orientasi dan respons aplikasi meliputi hal berikut:
screenOrientation
: Menentukan orientasi tetap untuk aplikasi. Aplikasi juga dapat menetapkan orientasi pada runtime dengan menggunakanActivity#setRequestedOrientation()
.resizeableActivity
: Menunjukkan apakah sistem dapat mengubah ukuran aplikasi agar sesuai dengan jendela dalam berbagai dimensi. Di Android 11 (level API 30) dan yang lebih rendah, menentukan apakah aplikasi mendukung mode multi-aplikasi. Di Android 12 (level API 31) dan yang lebih tinggi, menentukan apakah aplikasi mendukung mode multi-aplikasi di layar kecil (class ukuran jendela yang ringkas). Di Android 12 dan yang lebih tinggi, aplikasi mendukung mode multi-aplikasi di perangkat layar besar (class ukuran jendela sedang atau diperluas), terlepas dari setelan ini.maxAspectRatio
: Menentukan rasio aspek maksimum yang didukung oleh aplikasi. Hanya aplikasi denganresizeableActivity
yang ditetapkan kefalse
yang dapat menetapkanmaxAspectRatio
.minAspectRatio
: Menentukan rasio aspek minimum yang didukung oleh aplikasi. Hanya aplikasi denganresizeableActivity
yang ditetapkan kefalse
yang dapat menetapkanminAspectRatio
.
Pengoptimalan
Aplikasi harus mendukung semua ukuran dan orientasi tampilan mode multi-aplikasi serta perangkat. Hapus semua batasan rasio aspek tetap dan orientasi dari tata letak aplikasi dan file manifes aplikasi Anda.
Solusi kompatibilitas
Jika aplikasi dengan orientasi tetap atau rasio aspek tetap berjalan di jendela tempat aplikasi tidak secara langsung mendukung ukuran atau orientasi jendela, Android akan menampilkan aplikasi dengan tampilan lebar untuk mempertahankan kontinuitas.
Mulai Android 12 (API level 31) dan berlanjut dengan 12L (API level 32), platform ini menerapkan berbagai peningkatan untuk aplikasi dengan tampilan lebar. Produsen perangkat menerapkan peningkatan UI. Anda tidak perlu melakukan pengembangan tambahan agar aplikasi dapat memanfaatkan peningkatan ini.
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 dan menu navigasi, yang menempatkan aplikasi, bersifat semi-transparan sehingga ikon pada menu selalu terlihat di latar belakang tampilan lebar.
- Rasio aspek yang dapat dikonfigurasi: Rasio aspek aplikasi dapat disesuaikan untuk meningkatkan tampilan aplikasi.
12L (level API 32) menambahkan peningkatan fungsional berikut:
Posisi yang dapat dikonfigurasi: Di layar besar, produsen perangkat dapat memosisikan aplikasi ke sisi kiri atau kanan layar, sehingga interaksi menjadi lebih mudah.
Tombol mulai ulang yang didesain ulang: Produsen perangkat dapat memberikan tombol mulai ulang untuk tampilan baru mode kompatibilitas ukuran agar pengguna mendapatkan pengenalan yang lebih baik.
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:
Mode kompatibilitas ukuran
Mode kompatibilitas ukuran adalah tampilan lebar yang menyertakan kontrol mulai ulang. Kontrol ini memungkinkan pengguna memulai ulang aplikasi dan menggambar ulang tampilan. Android memanggil mode kompatibilitas ukuran untuk aplikasi yang ditentukan untuk tidak dapat diubah ukurannya. Saat aktivitas berpindah ke penampung tampilan yang tidak kompatibel dengan dimensi aktivitas, sistem dapat menskalakan ulang aplikasi untuk mengisi layar perangkat dalam 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) agar tidak dapat diubah ukurannya.
Aplikasi Anda dianggap dapat diubah ukurannya—dan tidak akan ditempatkan dalam mode kompatibilitas ukuran—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.
Pengoptimalan
Aplikasi harus mendukung semua ukuran tampilan. Buat aplikasi Anda dapat diubah ukurannya dengan menetapkan
atribut android:resizeableActivity
dari elemen <activity>
atau <application>
ke true
di
manifes aplikasi. Desain tata letak responsif/adaptif untuk aplikasi Anda. Untuk mengetahui informasi
selengkapnya, lihat
Mendukung berbagai ukuran tampilan dan Mendukung
mode multi-aplikasi.
Solusi kompatibilitas
Android menempatkan aplikasi dalam mode kompatibilitas ukuran saat sistem menentukan tampilan aplikasi tampilan lebar dapat ditingkatkan dengan mengubah skala aplikasi untuk mengisi jendela tampilan dalam setidaknya 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.
Loop berkedip
Jika tidak mendukung semua orientasi layar, aplikasi mungkin berulang kali meminta orientasi baru saat terjadi perubahan konfigurasi, sehingga menghasilkan loop terus-menerus yang membuat layar berkedip atau aplikasi berputar tanpa henti.
Masalah
Di Android 12 (level API 31) dan yang lebih tinggi, produsen perangkat dapat mengonfigurasi
perangkat mereka untuk mengabaikan batasan orientasi yang ditentukan aplikasi, dan sebagai gantinya
menerapkan mode kompatibilitas. Misalnya, perangkat foldable dapat mengabaikan
setelan android:screenOrientation="portrait"
aktivitas saat aktivitas ditampilkan di layar dalam seukuran
tablet lanskap pada perangkat.
Jika batasan orientasi aplikasi diabaikan, aplikasi dapat menetapkan orientasinya secara terprogram
dengan memanggil
Activity#setRequestedOrientation()
. Panggilan
memicu mulai ulang aplikasi jika aplikasi tidak menangani perubahan konfigurasi (lihat
Menangani perubahan konfigurasi). Setelah
mulai ulang, batasan orientasi aplikasi akan diabaikan lagi, aplikasi akan mengulangi
panggilan ke setRequestedOrientation()
, panggilan akan memicu mulai ulang aplikasi, dan
seterusnya dalam loop yang terus-menerus berlangsung.
Cara lain yang mungkin Anda lihat adalah saat
orientasi alami (orientasi biasa seperti
yang ditentukan oleh Android) layar perangkat adalah lanskap (yaitu, memanggil
Display#getRotation()
menampilkan
Surface.ROTATION_0
saat perangkat memiliki rasio aspek
lanskap). Secara historis, aplikasi mengasumsikan bahwa Display.getRotation() =
Surface.ROTATION_0
berarti perangkat dalam orientasi potret, tetapi tidak selalu
demikian, misalnya, di layar dalam beberapa perangkat foldable dan
di beberapa tablet.
Aplikasi dalam orientasi lanskap di layar dalam perangkat foldable dapat memeriksa
rotasi layar, menerima nilai ROTATION_0
, mengasumsikan bahwa orientasi alami
perangkat adalah potret, dan memanggil
setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
untuk mengonfigurasi ulang tata letak aplikasi. Setelah dimulai ulang (dalam orientasi
lanskap), aplikasi dapat memeriksa kembali rotasi layar, menerima nilai
ROTATION_0
, memanggil
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
, dan
melanjutkan loop tanpa batas.
Pengoptimalan
Aplikasi tidak boleh melakukan hal berikut:
- Setel orientasi default dengan
Activity#setRequestedOrientation()
dalam metodeonCreate()
aktivitas karena permintaan orientasi dapat dipicu secara tidak terduga 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
Display#getRotation()
, keberadaanFoldingFeature
, atau API yang tidak digunakan lagi.
Solusi kompatibilitas
Android mengabaikan panggilan ke Activity#setRequestedOrientation()
dalam situasi
berikut:
Aktivitas telah diluncurkan kembali dari panggilan sebelumnya ke metode, atau perlakuan putar paksa kompatibilitas kamera telah diaktifkan (lihat Pratinjau kamera 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 adanya loop. Dari dua permintaan dalam loop, Android menggunakan permintaan 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
Android Compatibility Definition Document menyatakan bahwa sensor gambar kamera "HARUS diorientasikan sehingga dimensi panjang kamera sejajar dengan dimensi panjang layar".
Aplikasi sering kali mengasumsikan bahwa orientasi perangkat dan orientasi sensor kamera adalah potret—asumsi yang wajar pada ponsel standar. Namun, orientasi alami tablet dan laptop beserta sensor kameranya dapat berupa lanskap. Selain itu, faktor bentuk baru seperti perangkat foldable dapat memiliki beberapa orientasi alam 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.
Pengoptimalan
Aplikasi kamera harus mengidentifikasi dan mengelola orientasi perangkat serta orientasi sensor kamera dengan benar untuk menampilkan pratinjau kamera yang diselaraskan dan diskalakan dengan benar. Aplikasi harus menghitung rotasi perangkat, rotasi sensor, dan rasio aspek layar atau jendela, lalu menerapkan hasilnya ke pratinjau kamera. Untuk panduan mendetail, lihat Pratinjau kamera dan Memperkenalkan Jendela Bidik Kamera.
Solusi kompatibilitas
Perangkat dalam orientasi alami saat Display#getRotation()
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, yang
diharapkan oleh sebagian besar aplikasi. Android juga memangkas gambar sensor kamera saat
orientasi sensornya adalah lanskap dan pratinjau kamera adalah potret. Solusi khusus
meliputi hal berikut:
Paksa putar pratinjau kamera bagi aplikasi yang dibatasi untuk potret: Aplikasi yang dibatasi untuk orientasi potret mengharapkan orientasi alami perangkat dan orientasi sensor kamera adalah potret. Namun, di Android 12 (level API 31) dan yang lebih tinggi, aplikasi dapat berjalan di beberapa orientasi perangkat jika produsen perangkat mengabaikan spesifikasi orientasi.
Saat aplikasi yang dibatasi untuk potret terhubung ke kamera, Android akan memutar paksa aplikasi untuk menyejajarkan jendela potret aplikasi dengan orientasi alami perangkat.
Di beberapa tablet (lihat perangkat referensi), jendela potret aplikasi diputar ke potret layar penuh agar selaras dengan orientasi alami perangkat. Aplikasi menempati layar penuh setelah diputar paksa.
Di layar dalam lanskap perangkat foldable (lihat perangkat referensi), aktivitas khusus potret diputar ke lanskap agar selaras dengan orientasi alami yang dibentangkan. Aplikasi memiliki tampilan lebar setelah diputar paksa.
Pemangkasan kamera depan bagian dalam: Sensor kamera depan bagian dalam di beberapa perangkat foldable berada dalam orientasi lanskap. Selain memutar paksa pratinjau kamera di layar dalam perangkat foldable, Android memangkas ruang pandang kamera depan (lanskap) internal sehingga sensor menangkap tampilan yang berlawanan dengan orientasi perangkat.
Muat ulang paksa pratinjau kamera: Sistem melakukan siklus melalui metode aktivitas
onStop()
danonStart()
(secara default) atauonPause()
danonResume()
(diterapkan oleh penggantian OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 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 menjadi 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 faktor bentuk perangkat. Namun, API yang tidak digunakan lagi masih tersedia untuk kompatibilitas mundur.
Beberapa View
API dirancang untuk tujuan khusus yang tidak selalu dipahami dengan baik
oleh developer.
Masalah
Developer terus menggunakan Display
API yang tidak digunakan lagi dan salah menganggap
API menampilkan batas aplikasi, bukan batas area tampilan perangkat. Atau, developer
salah menggunakan API tampilan tujuan khusus untuk mendapatkan metrik tampilan umum.
Hasilnya adalah kesalahan penghitungan saat memosisikan ulang elemen UI setelah peristiwa
pengubahan ukuran jendela aplikasi, sehingga menyebabkan masalah tata letak.
Display API yang tidak digunakan lagi dan umumnya disalahgunakan:
Untuk mengetahui informasi selengkapnya, lihat Mendukung mode multi-aplikasi.
View API yang disalahgunakan:
Pengoptimalan
Jangan pernah mengandalkan ukuran tampilan fisik untuk memosisikan elemen UI. Migrasikan
aplikasi Anda ke API berdasarkan WindowMetrics
, termasuk
WindowManager
API berikut:
Platform:
Jetpack:
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 untuk
aplikasi yang memenuhi syarat untuk mode kompatibilitas ukuran.
Aktivitas yang transparan
Aktivitas yang transparan adalah hasil dari gaya latar belakang transparan, misalnya:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
Tema terkait dialog, seperti Theme.MaterialComponents.Dialog
, dapat
menyertakan gaya yang membuat aktivitas transparan.
Aktivitas transparan tidak mencakup semua ruang tampilan yang tersedia, sehingga sulit dikelola karena area tampilan yang tersedia dapat berubah berdasarkan perubahan konfigurasi seperti rotasi perangkat, perangkat dilipat dan dibentangkan, serta mode multi-aplikasi.
Masalah
Aktivitas transparan harus sesuai dengan batas aktivitas buram pertama di bawah aktivitas transparan dalam tumpukan aktivitas tugas. Namun, aktivitas buram yang meluncurkan dialog izin dapat berupa trampolin (aktivitas yang meluncurkan aktivitas lain, lalu menghilang); sehingga sistem tidak dapat menentukan batas aktivitas trampolin yang meluncurkan aktivitas dialog izin transparan.
Pengoptimalan
Aktivitas transparan mewarisi batasannya dari aktivitas buram paling atas di bawahnya dalam tumpukan aktivitas tugas. Aktivitas buram harus tersedia untuk seluruh siklus proses aktivitas transparan, dari pembuatan aktivitas hingga penghancuran. Oleh karena itu, jangan luncurkan permintaan izin dari aktivitas trampolin.
Jika aktivitas trampolin meluncurkan permintaan izin, pengguna mungkin tidak dapat melihat dialog izin karena aktivitas trampolin akan dihancurkan sebelum pengguna memiliki kesempatan untuk merespons dialog, dan dimensi serta posisi aktivitas dialog mungkin telah dihitung secara tidak benar.
Aplikasi harus selalu meluncurkan permintaan izin dari aktivitas yang tetap terlihat sampai pengguna membuat keputusan izin.
Sudut membulat
Aktivitas dapat menjadi transparan karena gaya yang menentukan transparansi latar belakang atau karena konten aktivitas tidak mengisi ruang tampilan yang tersedia. Jika aktivitas transparan mengisi ruang tampilan yang tersedia, sistem akan secara otomatis menerapkan sudut membulat ke aktivitas tersebut jika dikonfigurasi demikian oleh produsen perangkat. Namun, jika aktivitas transparan (seperti dialog izin) tidak mengisi ruang yang tersedia, Anda dapat memutuskan apakah akan menerapkan sudut membulat atau tidak.
Dialog izin tidak mengisi ruang tampilan yang tersedia karena tata letak dialog biasanya menggunakan LayoutParams.WRAP_CONTENT, bukan LayoutParams.MATCH_PARENT.
Solusi kompatibilitas
Tetap tampilkan aktivitas yang meluncurkan aktivitas dialog hingga pengguna merespons dialog tersebut.
Sistem memastikan 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 dalam mode multi-aplikasi.
Masalah
Unity menambahkan opsi Resizable Window
di Unity 2019.4 untuk mendukung mode multi-aplikasi di Android. Namun,
implementasi awal tidak bereaksi terhadap siklus proses aktivitas dalam
mode multi-aplikasi dengan benar, sehingga menyebabkan
UnityPlayer menangguhkan pemutaran saat aplikasi kehilangan fokus. Pemain merender
layar gelap 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.
Pengoptimalan
Upgrade Unity ke versi 2019.4.40 atau yang lebih baru, lalu ekspor ulang game Anda. Biarkan
opsi Resizable Window
tetap dicentang di
setelan Android Player. Jika tidak,
game akan dijeda saat tidak dalam fokus, meskipun game sepenuhnya terlihat dalam
mode multi-aplikasi.
Solusi kompatibilitas
Produsen perangkat dapat menerapkan penggantian per aplikasi
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
untuk memberikan peristiwa fokus palsu ke aplikasi dalam
mode multi-aplikasi. Penggantian memungkinkan aktivitas menggambar ulang konten dan
tidak berhenti berfungsi.
Uji aplikasi Anda untuk menemukan masalah kompatibilitas
Untuk menguji aplikasi Anda dan memahami perilakunya pada berbagai faktor bentuk, manfaatkan referensi berikut:
- Streaming perangkat: Untuk menguji aplikasi Anda di perangkat produksi (termasuk perangkat referensi) yang dihosting di pusat data Google, lihat Streaming Perangkat Android, yang didukung oleh Firebase
- Emulator di Android Studio Hedgehog: Untuk mengetahui 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 perangkat virtual, 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 menjadi 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 aktivitas aplikasi Anda menggunakan seluruh ruang layar yang tersedia untuk aplikasi. Uji aplikasi Anda di semua jenis perangkat untuk memastikan perilaku yang konsisten.
Penggantian per aplikasi
Android menyediakan penggantian yang mengubah perilaku aplikasi yang dikonfigurasi. Misalnya, penggantian FORCE_RESIZE_APP
menginstruksikan sistem untuk mengabaikan mode kompatibilitas ukuran dan mengubah ukuran aplikasi agar sesuai dengan dimensi tampilan meskipun resizeableActivity="false"
ditentukan dalam manifes aplikasi.
Produsen perangkat menerapkan penggantian untuk aplikasi tertentu—atau semua aplikasi—di perangkat layar besar tertentu. Di Android 14 (API level 34) dan yang lebih tinggi, pengguna dapat menerapkan penggantian ke aplikasi melalui setelan perangkat.
Penggantian per aplikasi pengguna
Di Android 14 dan yang lebih baru, menu setelan memungkinkan pengguna mengubah rasio aspek aplikasi. Perangkat layar besar seperti perangkat referensi menerapkan menu.
Menu ini berisi daftar semua aplikasi yang diinstal di perangkat. Pengguna memilih aplikasi, lalu menetapkan rasio aspek aplikasi ke 3:4, 1:1, layar penuh, atau nilai lain yang dikonfigurasi oleh produsen perangkat. Pengguna juga dapat mereset rasio aspek ke default aplikasi, yang ditentukan dalam manifes aplikasi.
Aplikasi dapat memilih untuk tidak menggunakan penggantian kompatibilitas dengan menetapkan tag PackageManager.Property
berikut:
PROPERTY_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.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
Untuk memilih tidak ikut opsi layar penuh 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_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 Anda untuk semua layar: Jangan menetapkan 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 default.
Aplikasi dapat memilih untuk tidak mengaktifkan sebagian besar penggantian (lihat tabel Penggantian per aplikasi di bawah).
Anda dapat menguji aplikasi dengan penggantian yang diaktifkan atau dinonaktifkan menggunakan framework kompatibilitas (lihat Alat framework kompatibilitas). Jika diaktifkan, penggantian akan diterapkan ke seluruh aplikasi.
Anda juga dapat menggunakan Android Debug Bridge (adb) untuk mengaktifkan atau menonaktifkan penggantian dan menentukan penggantian mana yang berlaku untuk aplikasi Anda.
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 agar aplikasi tidak perlu mengandalkan penggantian. Anda dapat menambahkan tanda properti ke manifes aplikasi untuk memilih tidak mengaktifkan 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_USER | 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 henti. | |
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 memungkinkan aplikasi mengubah ukuran tanpa memasuki mode kompatibilitas ukuran saat layar diubah ukurannya.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Dalam manifes aplikasi, tetapkan
atribut android:resizeableActivity
ke true
atau, untuk
mendukung perubahan ukuran saat menonaktifkan mode multi-aplikasi dengan
android:resizeableActivity=false
, tetapkan flag metadata
android.supports_size_changes
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 tampilan.
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 tidak dapat diubah ukurannya dan memasuki mode kompatibilitas ukuran saat konfigurasi berubah.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Tetapkan atribut android:resizeableActivity
dan
tanda metadata android.supports_size_changes
ke false
dalam manifes aplikasi,
dan deklarasikan 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
yang disetel 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 menetapkan batasan rasio aspek di aplikasi Anda. Pastikan aplikasi Anda mendukung
berbagai ukuran tampilan. Gunakan class ukuran
jendela untuk mendukung berbagai tata letak berdasarkan jumlah ruang yang dimiliki aplikasi Anda
di layar. Lihat
Compose WindowSizeClass
API dan View
WindowSizeClass
API.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Tentukan batasan rasio aspek atau tetapkan tanda properti
PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
ke 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, sehingga 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
Tetapkan 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 dua cara: membiarkan
sistem menghancurkan dan membuat ulang aplikasi, atau mengelola perubahan konfigurasi
sendiri. Jika Anda mengelola perubahan konfigurasi sendiri, status aplikasi dapat
dipertahankan menggunakan ViewModel
. Dalam kasus yang sangat terbatas, Anda dapat memutuskan untuk mengunci
orientasi hanya pada layar kecil, meskipun aplikasi mungkin tidak diskalakan sebaik
saat membiarkan pengguna memutar aplikasi sesuai kebutuhan. Di Android 12L dan versi yang lebih baru,
orientasi tetap dapat diganti oleh konfigurasi perangkat. Untuk informasi
selengkapnya tentang menangani perubahan konfigurasi dan 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
Tetapkan 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_USER
Memungkinkan aplikasi mengisi ruang tampilan yang tersedia. Mengganti batasan orientasi,
pemberian ukuran, dan rasio aspek yang ditentukan dalam manifes aplikasi. Juga
mengabaikan panggilan ke
Activity#setRequestedOrientation()
.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Jangan menetapkan atribut manifes
android:screenOrientation
, atau tetapkan atribut ke"user"
.Tetapkan atribut manifes
android:resizeableActivity
ketrue
.Pada layar kecil, untuk mendukung perubahan ukuran aplikasi saat menonaktifkan mode multi-aplikasi dengan
android:resizeableActivity=false
, tetapkan tanda metadataandroid.supports_size_changes
ketrue
. Jangan tetapkanminAspectRatio
danmaxAspectRatio
.
Cara mengoptimalkan aplikasi
Buat aplikasi Anda mendukung semua orientasi; jangan tetapkan spesifikasi
screenOrientation
dalam manifes aplikasi Anda. Dukung kemampuan aplikasi untuk diubah ukurannya,
mode multi-aplikasi, dan semua rasio aspek tampilan dengan menetapkan
atribut android:resizeableActivity
di manifes aplikasi Anda ke true
. Lihat
Mendukung berbagai ukuran tampilan.
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 saat tidak ada orientasi tetap lainnya yang telah 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_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 jika OVERRIDE_ANY_ORIENTATION diaktifkan, penggantian hanya digunakan saat tidak ada orientasi tetap lainnya yang telah 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 dalam paket. Kecuali jika OVERRIDE_ANY_ORIENTATION diaktifkan, penggantian hanya digunakan saat tidak ada orientasi tetap lainnya yang telah 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
Membatasi penggantian OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, dan OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 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
- Opsi untuk menonaktifkan properti komponen
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
tidak diaktifkan - Produsen perangkat mengabaikan setelan permintaan orientasi 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
Tetapkan 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
yang 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 sebagai respons terhadap aplikasi yang memanggil Activity#setRequestedOrientation()
lebih dari dua kali dalam satu detik jika 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
ke
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 tampilan.
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 mengaktifkan setelan permintaan orientasi yang diabaikan produsen perangkat. Hubungi 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 tanda 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 area
layar yang dimiliki aplikasi pada tampilan saat ini. Lihat
Menggunakan 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 agar 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
tanda 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. Migrasikan aplikasi Anda 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 batas jendela aplikasi dan offset terkait jendela aplikasi, bukan batas tampilan perangkat dan offset terkait tampilan perangkat.
Cara mengoptimalkan aplikasi
Aplikasi harus menggunakan View
API, dengan mempertimbangkan kemungkinan mode tampilan lebar
dan mode multi-aplikasi 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. Untuk panduan kompatibilitas kamera, lihat Memperkenalkan Jendela Bidik Kamera dan Mendukung platform yang dapat diubah ukurannya di aplikasi kamera Anda.
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 siklus onResume()
→ onPause()
→ 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 jika orientasi kamera potret tidak selaras dengan orientasi perangkat alami. Banyak aplikasi tidak menangani situasi ini dan justru menampilkan gambar yang direntangkan.
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 memilih tidak ikut berbagi layar aplikasi (lihat
Proyeksi media). Diimplementasikan saat aplikasi menyalahgunakan
createConfigForDefaultDisplay()
API untuk memaksa
pengambilan layar penuh dan membahayakan privasi pengguna dengan mengekspos konten
notifikasi, yang diambil dengan layar penuh, tetapi bukan berbagi layar
aplikasi, dan semua aplikasi, terlepas dari mode windowing.
Cara aplikasi dapat mencapai hasil yang sama dengan penggantian
Mengizinkan perilaku proyeksi media default (diterapkan di Android 14, level
API 34, dengan createScreenCaptureIntent()
),
yang memungkinkan pengguna memutuskan apakah akan membagikan layar penuh atau satu jendela
aplikasi, terlepas dari mode jendela. Atau, panggil
createScreenCaptureIntent(MediaProjectionConfig)
dengan argumen MediaProjectionConfig
yang ditampilkan dari
panggilan ke createConfigForUserChoice()
.
Cara mengoptimalkan aplikasi
Mengizinkan pengguna memilih apakah akan membagikan seluruh tampilan perangkat atau jendela aplikasi selama proyeksi media, yang mulai Android 14 adalah perilaku default.
Buat aplikasi Anda dapat diubah ukurannya (resizeableActivity="true"
) untuk
mendukung mode multi-aplikasi.
Cara menonaktifkan atau memilih tidak mengaktifkan penggantian
Karena pentingnya privasi pengguna, aplikasi Anda tidak dapat menonaktifkan atau memilih tidak ikut 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 (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 berbagi layar sebagian:
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. Beberapa game engine menunggu untuk mendapatkan fokus sebelum menggambar konten aplikasi; sehingga, fokus palsu membantu aplikasi agar tidak berhenti berfungsi saat dilanjutkan dan belum memiliki 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 perubahan konfigurasi dengan baik. Siapkan aplikasi 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, lalu ekspor ulang game Anda. Biarkan opsi Resizable Window
tetap dicentang di setelan
Android Player.
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