Layar 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 tetap 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 tersebut kemudian berfungsi sebagai satu sistem berkelanjutan. Penyiapan ini memungkinkan jendela, konten, dan kursor bergerak bebas di antara dua layar.
Untuk mendukung tampilan terhubung secara efektif, Anda harus memperhatikan beberapa aspek desain dan penerapan aplikasi. 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 tampilan, objek Display pokok yang terkait dengan konteks atau jendela aplikasi Anda dapat berubah. Properti layar, seperti ukuran, resolusi, kecepatan refresh, dukungan HDR, dan kepadatan, dapat berbeda-beda. Jika Anda meng-hardcode nilai berdasarkan layar ponsel, misalnya, tata letak Anda kemungkinan akan rusak di layar eksternal.
Layar eksternal juga dapat memiliki kepadatan piksel yang sangat berbeda. Anda harus memastikan aplikasi Anda merespons dengan benar perubahan kepadatan. Hal ini melibatkan penggunaan piksel kepadatan mandiri (dp) untuk tata letak, penyediaan resource khusus kepadatan, dan memastikan UI Anda diskalakan dengan tepat.
Jika suatu 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.
Menggunakan 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 tampilan menggunakan objek CompositionLocal seperti LocalConfiguration.current dan LocalDensity.current. Saat aktivitas atau jendela berpindah antar-tampilan, konfigurasi perangkat 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 tanda tampilan. Gunakan layanan sistem DisplayManager untuk mendapatkan tampilan yang tersedia. Untuk mengidentifikasi layar eksternal, kecualikan 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 tampilan terhubung, aplikasi dapat menentukan tampilan mana yang harus dijalankan 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 entitas yang meluncurkan aktivitas.
Saat berpindah ke tampilan sekunder, aplikasi Anda dapat mengalami update konteks, perubahan ukuran jendela, serta perubahan konfigurasi dan resource. Jika aktivitas menangani perubahan konfigurasi, hal ini akan diberitahukan 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 tampilan 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 perangkat tertentu melalui daftar yang diizinkan atau dengan memeriksa BUILD.MODEL dan ukuran tampilan bawaan. Pendekatan ini tidak efektif untuk layar yang terhubung karena hampir semua perangkat dapat terhubung 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 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 lancar dengan periferal ini. Hal ini mencakup penanganan pintasan keyboard, pengelolaan interaksi pointer mouse, dukungan yang benar untuk kamera atau mikrofon eksternal, dan menghormati perutean 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 membuat 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 berharga untuk tugas seperti membandingkan dokumen, mengelola percakapan yang berbeda, atau melihat beberapa file secara bersamaan.
- Memungkinkan pengguna membagikan data multimedia 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 diberikan, Anda dapat membuat aplikasi yang beradaptasi dengan lancar ke layar yang terhubung, sehingga menawarkan pengalaman yang lebih kaya dan lebih produktif kepada pengguna.