Mode kompatibilitas perangkat

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 menganggap ROTATION_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.

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 menggunakan Activity#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 dengan resizeableActivity yang disetel ke false yang dapat setel maxAspectRatio.

  • minAspectRatio: Menentukan rasio aspek minimum didukung oleh aplikasi. Hanya aplikasi dengan resizeableActivity yang disetel ke false yang dapat setel minAspectRatio.

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.

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.

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:

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:

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

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.

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.

Pengoptimalan

Aplikasi tidak boleh melakukan hal berikut:

  • Setel orientasi default dengan Activity#setRequestedOrientation() di metode onCreate() 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(), keberadaan FoldingFeature, atau API yang tidak digunakan lagi.

Solusi kompatibilitas

Android mengabaikan panggilan ke Activity#setRequestedOrientation() dalam hal berikut situasi:

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.

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.

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.

    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.

  • 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() dan onStart() (secara default) atau onPause() dan onResume() (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:

Pengoptimalan

Jangan pernah mengandalkan ukuran tampilan fisik untuk memosisikan elemen UI. Migrasikan aplikasi ke API berdasarkan WindowMetrics, termasuk kode berikut WindowManager API:

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.

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

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

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.

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:

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 tampilan 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 panduan 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, setel 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:

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 dukungan 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 ke true.

  • Di layar kecil, untuk mendukung perubahan ukuran aplikasi sekaligus menonaktifkan multi-aplikasi mode dengan android:resizeableActivity=false, setel atribut Tanda metadata android.supports_size_changes ke true. Jangan tetapkan minAspectRatio dan maxAspectRatio.

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