Layar yang terhubung memperluas pengalaman mode jendela desktop ke ponsel standar, sehingga pengguna dapat mengakses layar besar dari perangkat seluler mereka. Kemampuan ini membuka kemungkinan baru untuk interaksi aplikasi dan produktivitas pengguna.
Semua fitur unik mode jendela desktop berlaku untuk layar terhubung. Saat Anda menghubungkan ponsel ke layar, status ponsel tidak berubah, dan sesi desktop kosong dimulai di layar yang terhubung. Perangkat dan layar berfungsi sebagai dua sistem terpisah, dengan aplikasi khusus untuk setiap layar.
Jika Anda menghubungkan perangkat yang mendukung mode jendela desktop, seperti tablet, ke monitor eksternal, sesi desktop akan diperluas ke kedua layar. Kedua layar kemudian berfungsi sebagai satu sistem yang berkelanjutan. Penyiapan ini memungkinkan jendela, konten, dan kursor berpindah dengan bebas di antara kedua layar.
Mendukung layar yang terhubung secara efektif memerlukan perhatian pada beberapa aspek desain dan implementasi aplikasi Anda. Praktik terbaik berikut memastikan pengalaman pengguna yang lancar dan produktif.
Menangani perubahan tampilan dinamis
Banyak aplikasi dibuat dengan asumsi bahwa objek Display dan
karakteristiknya tidak akan berubah selama siklus proses aplikasi. Namun, saat pengguna
menghubungkan atau memutuskan koneksi monitor eksternal, atau bahkan memindahkan jendela aplikasi di antara
layar, objek Display yang mendasarinya yang terkait dengan konteks atau
jendela aplikasi Anda dapat berubah. Properti layar, seperti ukuran, resolusi, kecepatan refresh, dukungan HDR, dan kepadatan, semuanya dapat berbeda. Misalnya, jika Anda melakukan hardcode nilai
berdasarkan layar ponsel, tata letak Anda kemungkinan akan rusak di
layar eksternal.
Layar eksternal juga dapat memiliki kepadatan piksel yang sangat berbeda. Anda harus memastikan aplikasi merespons perubahan kepadatan dengan benar. Hal ini melibatkan penggunaan piksel kepadatan mandiri (dp) untuk tata letak, penyediaan resource khusus kepadatan, dan memastikan UI Anda diskalakan dengan tepat.
Jika aktivitas berjalan di layar eksternal saat layar terputus, sistem akan memindahkan aktivitas ke layar utama. Perpindahan ini memicu perubahan konfigurasi—seperti perubahan ukuran dan kepadatan layar—yang dapat menyebabkan aktivitas dibuat ulang. Aplikasi Anda harus menangani perubahan konfigurasi dengan menyimpan dan memulihkan status UI untuk mencegah kehilangan data atau pengalaman pengguna yang membingungkan.
Gunakan konteks yang tepat
Menggunakan konteks yang tepat sangat penting dalam lingkungan multi-tampilan. Saat mengakses resource, konteks aktivitas (yang ditampilkan) berbeda dengan konteks aplikasi (yang tidak ditampilkan).
Konteks aktivitas berisi informasi tentang tampilan dan selalu disesuaikan untuk area tampilan tempat aktivitas muncul. Hal ini memungkinkan Anda mendapatkan informasi yang benar tentang kepadatan tampilan atau metrik jendela aplikasi Anda. Selalu gunakan konteks aktivitas (atau konteks berbasis UI lainnya) untuk mendapatkan informasi tentang jendela atau tampilan saat ini. Hal ini juga memengaruhi beberapa API sistem yang menggunakan informasi dari konteks.
Di Jetpack Compose, Anda dapat mengakses informasi khusus layar menggunakan
objek CompositionLocal seperti LocalConfiguration.current dan
LocalDensity.current. Saat aktivitas atau jendela berpindah antar-layar,
konfigurasi perangkat akan berubah, sehingga memicu rekomposisi dengan metrik
tampilan baru. Objek CompositionLocal memungkinkan UI Anda beradaptasi dengan lancar.
Mendapatkan informasi tampilan
Anda dapat menggunakan class Display untuk mendapatkan informasi seperti ukuran, kepadatan, atau flag layar. Gunakan layanan sistem DisplayManager untuk mendapatkan
tampilan yang tersedia. Untuk mengidentifikasi layar eksternal, filter
Display.DEFAULT_DISPLAY, yang biasanya merupakan layar ponsel atau tablet
bawaan:
val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val displays = displayManager.getDisplays() // The default display is 0. External displays have other IDs. val externalDisplays = displays.filter { it.displayId != Display.DEFAULT_DISPLAY }
Mengelola peluncuran dan konfigurasi aktivitas
Dengan layar yang terhubung, aplikasi dapat menentukan layar mana yang harus dijalankan aplikasi saat diluncurkan atau saat membuat aktivitas lain. Perilaku ini bergantung pada mode peluncuran aktivitas yang ditentukan dalam file manifes, dan dalam flag intent serta opsi yang disetel oleh entity yang meluncurkan aktivitas.
Saat berpindah ke layar sekunder, aplikasi Anda dapat mengalami update
konteks, perubahan ukuran jendela, serta perubahan konfigurasi dan resource. Jika aktivitas
menangani perubahan konfigurasi, aktivitas akan diberi tahu di
onConfigurationChanged(). Jika tidak, aktivitas akan diluncurkan kembali.
Jika mode peluncuran yang dipilih untuk suatu aktivitas memungkinkan beberapa instance, peluncuran pada layar sekunder dapat membuat instance aktivitas baru. Kedua aktivitas dilanjutkan secara bersamaan, yang dapat bermanfaat untuk skenario multitasking tertentu.
Anda dapat meluncurkan aktivitas di layar tertentu menggunakan ActivityOptions.
Perhatikan bahwa launchDisplayId memerlukan Android 8 (API level 26) atau yang lebih tinggi.
// Get DisplayManager and find the first external display. val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val externalDisplayId = displayManager.displays .firstOrNull { it.displayId != Display.DEFAULT_DISPLAY } ?.displayId // If an external display is found, launch the activity on it. if (externalDisplayId != null) { val intent = Intent(this, MySecondaryActivity::class.java) val options = ActivityOptions.makeBasic() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { options.launchDisplayId = externalDisplayId } startActivity(intent, options.toBundle()) } else { // Optionally, handle the case where no external display is connected. }
Menghindari daftar perangkat yang diizinkan
Aplikasi terkadang membatasi UI dan fitur layar besar untuk memilih perangkat melalui
daftar yang diizinkan atau dengan memeriksa BUILD.MODEL dan ukuran layar bawaan.
Pendekatan ini tidak efektif untuk layar yang terhubung karena hampir semua
perangkat dapat dihubungkan ke layar besar, dan model perangkat tidak berubah
saat layar eksternal terhubung.
Daripada menggunakan daftar yang diizinkan atau memeriksa BUILD.MODEL dan ukuran
tampilan bawaan, periksa metrik jendela atau kemampuan perangkat saat runtime untuk membuat keputusan
UI. Gunakan API Jetpack WindowManager atau class ukuran jendela untuk
membuat tata letak yang responsif dan adaptif untuk berbagai ukuran dan kepadatan layar.
Mendukung periferal eksternal
Saat terhubung ke layar eksternal, pengguna sering kali membuat lingkungan yang lebih mirip desktop. Hal ini sering kali melibatkan penggunaan keyboard eksternal, mouse, trackpad, webcam, mikrofon, dan speaker. Anda harus memastikan aplikasi Anda berfungsi dengan lancar dengan periferal ini. Hal ini mencakup penanganan pintasan keyboard, pengelolaan interaksi kursor mouse, dukungan yang benar untuk kamera atau mikrofon eksternal, dan penghormatan terhadap pemilihan rute output audio. Untuk mengetahui detail selengkapnya, lihat Kompatibilitas input di perangkat layar besar.
Meningkatkan produktivitas pengguna
Layar yang terhubung memberikan peluang signifikan untuk meningkatkan produktivitas pengguna. Sekarang Anda memiliki alat untuk membangun aplikasi seluler yang dapat menawarkan pengalaman yang sebanding dengan aplikasi desktop. Pertimbangkan untuk menerapkan fitur berikut guna meningkatkan produktivitas pengguna:
- Izinkan pengguna membuka beberapa instance aplikasi yang sama. Hal ini sangat berguna untuk tugas seperti membandingkan dokumen, mengelola percakapan yang berbeda, atau melihat beberapa file secara bersamaan.
- Memungkinkan pengguna berbagi data lengkap di dalam dan di luar aplikasi Anda dengan tarik lalu lepas.
- Bantu pengguna mempertahankan alur kerja mereka di seluruh perubahan konfigurasi dengan menerapkan sistem pengelolaan status yang andal.
Dengan mengikuti panduan ini dan menggunakan contoh kode yang disediakan, Anda dapat membuat aplikasi yang beradaptasi dengan lancar ke layar yang terhubung, sehingga menawarkan pengalaman yang lebih kaya dan produktif kepada pengguna.