Mendukung jendela desktop

Jendela desktop memungkinkan pengguna menjalankan beberapa aplikasi secara bersamaan di jendela aplikasi yang dapat diubah ukurannya untuk pengalaman serbaguna seperti desktop.

Pada gambar 1, Anda dapat melihat pengaturan layar dengan jendela desktop yang diaktifkan. Hal-hal yang perlu diperhatikan:

  • Pengguna dapat menjalankan beberapa aplikasi secara berdampingan.
  • Taskbar berada di posisi tetap di bagian bawah layar yang menampilkan aplikasi yang sedang berjalan. Pengguna dapat menyematkan aplikasi untuk akses cepat.
  • Panel header baru yang dapat disesuaikan menghiasi bagian atas setiap jendela dengan kontrol seperti perkecil dan maksimalkan.
Gambar 1. Jendela desktop di tablet.

Secara default, aplikasi akan dibuka dengan layar penuh di tablet Android. Untuk meluncurkan aplikasi dalam jendela desktop, tekan lama handle jendela di bagian atas layar, lalu tarik handle dalam UI, seperti yang terlihat pada gambar 2.

Saat aplikasi terbuka di jendela desktop, aplikasi lain terbuka di jendela desktop sebagai ya.

Gambar 2. Tekan, tahan, dan tarik tuas jendela aplikasi untuk masuk ke jendela desktop.

Pengguna juga dapat memanggil jendela desktop dari menu yang muncul di bawah tuas jendela saat Anda mengetuk atau mengklik tuas atau menggunakan pintasan keyboard Tombol meta (Windows, Command, atau Penelusuran) + Ctrl + Down.

Pengguna keluar dari jendela desktop dengan menutup semua jendela yang aktif atau dengan menarik handel jendela di bagian atas jendela desktop dan menarik aplikasi ke bagian atas layar. Pintasan keyboard Meta + H juga akan keluar jendela desktop dan menjalankan aplikasi layar penuh lagi.

Untuk kembali ke jendela desktop, ketuk atau klik kartu ruang desktop di layar Terbaru.

Mode kompatibilitas dan kemampuan untuk diubah ukurannya

Di windowing desktop, aplikasi dengan orientasi terkunci dapat diubah ukurannya secara bebas. Artinya, meskipun aktivitas terkunci ke orientasi potret, pengguna masih dapat mengubah ukuran aplikasi ke jendela orientasi lanskap.

Gambar 3. Mengubah ukuran jendela aplikasi yang dibatasi potret menjadi lanskap.

Aplikasi yang dinyatakan sebagai tidak dapat diubah ukurannya (yaitu, resizableActivity = false) menskala UI dengan tetap mempertahankan rasio aspek yang sama.

Gambar 4. UI aplikasi yang tidak dapat diubah ukurannya akan diskalakan saat ukuran jendela diubah.

Aplikasi kamera yang mengunci orientasi atau dideklarasikan sebagai tidak dapat diubah ukurannya memiliki perlakuan khusus untuk jendela bidik kamera mereka: jendela sepenuhnya dapat diubah ukurannya, tetapi jendela bidik mempertahankan rasio aspek yang sama. Dengan mengasumsikan aplikasi selalu berjalan dalam mode potret atau lanskap, aplikasi akan melakukan hardcode atau membuat asumsi yang menyebabkan kesalahan penghitungan pratinjau atau orientasi gambar yang diambil atau rasio aspek yang menghasilkan gambar yang diregangkan, miring, atau terbalik.

Hingga aplikasi siap untuk menerapkan jendela bidik kamera yang sepenuhnya responsif, perlakuan khusus memberikan pengalaman pengguna yang lebih mendasar yang mengurangi akibat dari asumsi yang keliru.

Untuk mempelajari lebih lanjut mode kompatibilitas untuk aplikasi kamera, lihat Mode kompatibilitas perangkat.

Gambar 5. Jendela bidik kamera mempertahankan rasio aspeknya saat ukuran jendela diubah.

Inset header yang dapat disesuaikan

Semua aplikasi yang berjalan dalam jendela desktop memiliki panel header, bahkan dalam mode imersif.
Pastikan konten aplikasi tidak terhalang oleh kolom header. Panel header adalah jenis inset kolom teks: androidx.compose.foundation.layout.WindowInsets.Companion.captionBar(); dalam tampilan, WindowInsets.Type.captionBar(), yang merupakan bagian dari panel sistem.

Anda dapat mempelajari lebih lanjut cara menangani inset di Menampilkan konten layar penuh di aplikasi Anda dan menangani inset jendela di Compose.

Bilah header juga dapat disesuaikan. Android 15 memperkenalkan jenis tampilan APPEARANCE_TRANSPARENT_CAPTION_BAR_BACKGROUND untuk membuat panel header transparan agar aplikasi dapat menggambar konten kustom di dalam panel header.

Aplikasi kemudian bertanggung jawab untuk menata gaya bagian atas kontennya agar terlihat seperti kolom teks (latar belakang, konten kustom, dan sebagainya) dengan pengecualian elemen teks sistem (tombol tutup dan maksimalkan), yang digambar oleh sistem di kolom teks transparan di atas aplikasi.

Aplikasi dapat mengubah tampilan elemen sistem di dalam teks untuk tema terang dan gelap menggunakan APPEARANCE_LIGHT_CAPTION_BARS, mirip dengan bagaimana status bar dan {i>navigationbar<i} dialihkan.

Android 15 juga memperkenalkan metode WindowInsets#getBoundingRects() yang memungkinkan aplikasi melakukan introspeksi inset panel teks secara lebih mendetail. Aplikasi dapat membedakan antara area tempat sistem menggambar elemen sistem dan area yang tidak dimanfaatkan tempat aplikasi dapat menempatkan konten kustom tanpa elemen sistem yang tumpang-tindih.

Daftar objek Rect yang ditampilkan oleh API menunjukkan region sistem yang harus dihindari. Ruang yang tersisa (dihitung dengan mengurangi persegi panjang dari Insets panel teks) adalah tempat aplikasi dapat menggambar tanpa tumpang-tindih elemen sistem dan dengan kemampuan untuk menerima input.

Chrome sebelum dan sesudah menerapkan header kustom.
Gambar 6. Chrome sebelum dan sesudah menerapkan header kustom.

Dukungan multitasking dan multitasking

{i>Multitasking<i} adalah inti dari {i>windowing<i} desktop, dan memungkinkan aplikasi Anda dapat sangat meningkatkan produktivitas pengguna.

Android 15 memperkenalkan PROPERTI_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI, aplikasi mana yang dapat disetel untuk menetapkan bahwa UI sistem harus ditampilkan untuk aplikasi memungkinkannya untuk diluncurkan sebagai beberapa instance.

Mengelola instance aplikasi dengan gestur tarik

Dalam mode multi-aplikasi, pengguna dapat memulai instance aplikasi baru dengan menarik elemen tampilan dari jendela aplikasi. Pengguna juga dapat memindahkan elemen di antara instance aplikasi yang sama.

Gambar 7. Mulai instance Chrome baru dengan menarik tab dari jendela desktop.

Android 15 memperkenalkan dua flag untuk menyesuaikan perilaku tarik lalu lepas:

  • DRAG_FLAG_START_INTENT_SENDER_ON_UNHANDLED_DRAG: Menunjukkan bahwa tarik yang tidak ditangani harus didelegasikan ke sistem untuk dimulai jika tidak ada jendela yang terlihat yang menangani lepas. Saat menggunakan tanda ini, pemanggil harus memberikan ClipData dengan Item yang berisi IntentSender tidak dapat diubah menjadi aktivitas yang akan diluncurkan (lihat ClipData.Item.Builder#setIntentSender()). Sistem dapat meluncurkan intent atau tidak berdasarkan faktor seperti layar saat ini ukuran atau mode windowing. Jika sistem tidak meluncurkan intent, intent-nya akan dibatalkan dengan menggunakan alur {i>drag and drop<i} biasa.

  • DRAG_FLAG_GLOBAL_SAME_APPLICATION: Menunjukkan bahwa operasi tarik dapat melewati batas jendela (untuk beberapa instance aplikasi yang sama).

    Saat startDragAndDrop() dipanggil dengan set tanda ini, hanya jendela yang terlihat milik jendela yang sama aplikasi dapat berpartisipasi dalam operasi tarik dan menerima konten yang ditarik.

Gambar 8. Memindahkan tab di antara dua instance aplikasi Chrome.

Pengoptimalan tambahan

Menyesuaikan peluncuran aplikasi dan mentransisikan aplikasi dari jendela desktop ke layar penuh.

Menentukan ukuran dan posisi default

Tidak semua aplikasi, meskipun dapat diubah ukurannya, memerlukan jendela besar untuk menawarkan nilai bagi pengguna. Anda dapat menggunakan metode ActivityOptions#setLaunchBounds() untuk menentukan ukuran dan posisi default saat aktivitas diluncurkan.

Masuk ke mode layar penuh dari ruang desktop

Aplikasi dapat memasuki mode layar penuh secara terprogram dengan memanggil Activity#requestFullScreenMode() Metode ini menempatkan aplikasi dalam mode layar penuh langsung dari jendela desktop.