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 windowing desktop yang diaktifkan. Hal-hal yang perlu diperhatikan:

  • Pengguna dapat menjalankan beberapa aplikasi secara berdampingan secara bersamaan.
  • 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 minimalkan 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 juga akan terbuka di jendela desktop.

Gambar 2. Tekan, tahan, dan tarik handle jendela aplikasi untuk memasuki jendela desktop.

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

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

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

Mode kompatibilitas dan kemampuan untuk diubah ukurannya

Dalam jendela 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 dideklarasikan sebagai tidak dapat diubah ukurannya (yaitu, resizeableActivity = false) akan diskalakan UI-nya dengan tetap mempertahankan rasio aspek yang sama.

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

Aplikasi kamera yang mengunci orientasi atau dideklarasikan sebagai tidak dapat diubah ukurannya memiliki perlakuan khusus untuk jendela bidik kameranya: jendela dapat diubah ukurannya sepenuhnya, 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 dasar yang mengurangi efek yang mungkin ditimbulkan oleh asumsi yang salah.

Untuk mempelajari mode kompatibilitas untuk aplikasi kamera lebih lanjut, 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 Anda tidak terhalang oleh panel 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.

Panel 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 kolom header.

Selanjutnya, aplikasi 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 perbesar), yang digambar oleh sistem pada kolom teks transparan di bagian atas aplikasi.

Aplikasi dapat mengalihkan tampilan elemen sistem di dalam teks untuk tema terang dan gelap menggunakan APPEARANCE_LIGHT_CAPTION_BARS, serupa dengan cara status bar dan menu navigasi diaktifkan.

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 digunakan tempat aplikasi dapat menempatkan konten kustom tanpa tumpang-tindih elemen sistem.

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 multi-instance

Multitasking adalah inti dari jendela desktop, dan mengizinkan beberapa instance aplikasi Anda dapat sangat meningkatkan produktivitas pengguna.

Android 15 memperkenalkan PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI, yang dapat ditetapkan aplikasi untuk menentukan bahwa UI sistem harus ditampilkan agar aplikasi memungkinkannya 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 tertangani harus didelegasikan ke sistem untuk dimulai jika tidak ada jendela yang terlihat yang menangani operasi lepas. Saat menggunakan tanda ini, pemanggil harus menyediakan ClipData dengan Item yang berisi IntentSender yang tidak dapat diubah ke aktivitas yang akan diluncurkan (lihat ClipData.Item.Builder#setIntentSender()). Sistem dapat meluncurkan intent atau tidak berdasarkan faktor seperti ukuran layar atau mode jendela saat ini. Jika sistem tidak meluncurkan intent, intent akan dibatalkan melalui alur tarik lalu lepas normal.

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

    Saat startDragAndDrop() dipanggil dengan flag ini ditetapkan, hanya jendela yang terlihat milik aplikasi yang sama yang 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 menetapkan ukuran dan posisi default saat aktivitas diluncurkan.

Masuk ke layar penuh dari ruang desktop

Aplikasi dapat beralih ke mode layar penuh dengan memanggil Activity#requestFullScreenMode(). Metode ini menampilkan layar penuh aplikasi langsung dari jendela desktop.