Bergabunglah bersama kami di ⁠#Android11: The Beta Launch Show pada tanggal 3 Juni!

Kompatibilitas ukuran layar untuk Chromebook

Implementasi aplikasi Android di Chrome OS menyertakan dukungan multi-aplikasi dasar. Alih-alih otomatis menggambar pada layar penuh, Android merender aplikasi di Chrome OS ke dalam tata letak yang sesuai untuk faktor bentuk.

Mengubah ukuran tugas dan jendela

Karena ukuran jendela aktivitas dapat berubah, aktivitas harus bisa membaca resolusi aktivitas saat dimulai. Aktivitas harus menanggapi perubahan resolusi dengan memanggil onConfigurationChanged(..). Misalnya, demi menghindari hilangnya pekerjaan pengguna saat proses memaksimalkan, Anda dapat melakukan salah satu cara berikut:

  • Menangani perubahan konfigurasi secara dinamis dengan menambahkan android:configChanges="screenSize|smallestScreenSize|orientation|screenLayout" ke manifes aktivitas.
  • Memulihkan status sebelumnya menggunakan onSaveInstanceState untuk membuat transisi sesederhana mungkin. Tindakan ini berlaku jika permintaan mulai ulang adalah satu-satunya pilihan.

Saat mencari konfigurasi saat ini, selalu gunakan konfigurasi dari aktivitas Anda saat ini di getResources().getConfiguration(). Jangan gunakan konfigurasi dari aktivitas latar belakang Anda atau konfigurasi dari resource sistem. Aktivitas latar belakang tidak memiliki ukuran, dan konfigurasi sistem mungkin berisi beberapa jendela dengan ukuran dan orientasi yang bertentangan, sehingga tidak ada data yang dapat digunakan yang bisa diekstrak.

Pertimbangan penting lainnya adalah batas konten jendela dapat berubah. Misalnya, area dalam jendela yang digunakan oleh aplikasi dapat berubah jika jendela menjadi terlalu besar bagi layar. Perhatikan panduan berikut:

  • Aplikasi yang memanfaatkan proses tata letak Android akan otomatis diletakkan di ruang yang tersedia.
  • Aplikasi yang sudah ada di perangkat akan membaca area yang tersedia dan memantau perubahan ukuran untuk menghindari elemen UI yang tidak dapat diakses. Panggil metode berikut guna menentukan ukuran awal yang tersedia untuk permukaan ini:
    • NativeActivity.mLastContent[X/Y/Width/Height]()
    • findViewById(android.R.id.content).get[Width/Height]()
    Pemantauan berkelanjutan dapat dilakukan melalui observer:
    • NativeActivity.onContentRectChangedNative()
    • NativeActivity.onGlobalLayout()
    • Tambahkan pemroses ke view.addOnLayoutChangeListener(findViewById(android.R.id.content))
    Jika aplikasi melakukan prapenskalaan pada posternya, aplikasi tersebut akan melakukan tindakan ini setiap kali resolusi berubah.

Sistem ini mendukung pengubahan ukuran bebas; tetapi, tidak semua aplikasi ditulis dengan mempertimbangkan pengubahan ukuran. Berikut beberapa potensi masalah yang harus diperhatikan:

  • Tangani pengubahan ukuran dengan lancar. Anda dapat mengubah ukuran kapan saja karena berbagai alasan. Oleh karena itu, sangat penting untuk dapat menyimpan dan memulihkan status Anda sebaik mungkin melalui onSaveInstanceState jika perlu memulai ulang. Ingat bahwa tindakan tersebut juga bermanfaat untuk Android secara umum.
  • Pastikan juga mulai ulang aktivitas dapat dilakukan secara cepat dengan meng-cache objek yang telah Anda alokasikan sebelumnya. Jika Anda tidak menggunakan mekanisme tata letak framework—sehingga aplikasi Anda, misalnya, menggunakan OpenGL dan menskalakan konten, atau beberapa logika lainnya dimulai—Anda harus memproses peristiwa onConfigurationChanged untuk menghindari aktivitas dimulai ulang. Pastikan untuk menentukan semua perubahan peristiwa yang dapat Anda tangani secara dinamis.
  • Jika tidak ingin mengubah ukuran, sebaiknya tentukan dengan benar peristiwa tersebut dalam file manifes Anda.
  • Perlu diperhatikan bahwa ukuran jendela bukanlah ukuran layar dan mungkin saja Anda tidak memerlukan ukuran layar. Untuk mendapatkan ukuran jendela, Anda harus menggunakan Activity.getResources().getConfiguration().screenWidth dan Activity.getResources().getConfiguration().screenHeight di PB.

Untuk mendapatkan konfigurasi saat ini, selalu gunakan resource aktivitas Anda dan dapatkan konfigurasi dari resource aktivitas tersebut, karena jika tidak, Anda mungkin mendapati “sesuatu”, seperti properti layar.

Ingat bahwa posisi layar dapat berubah juga. Jadi, pastikan selalu menggunakan sistem guna melakukan penghitungan ruang jendela ke layar atau sebaliknya.

Jika menggunakan sistem tampilan Android, jendela Anda akan otomatis tersusun dengan perubahan ukuran.

Jika Anda tidak menggunakan sistem tampilan dan mengambil alih permukaan, aplikasi Anda harus menangani perubahan ukuran sendiri.

Aplikasi yang sudah ada di perangkat harus menggunakan anggota mLastContent—atau membuat tampilan konten untuk memperoleh ukuran awal.

Setelah aplikasi berjalan, aplikasi harus memproses peristiwa onContentRectChangedNative atau onGlobalLayout untuk menanggapi perubahan ukuran.

Ingat bahwa dengan perubahan ukuran, aplikasi harus menskalakan ulang atau memuat ulang tata letak, poster, dan mengupdate area input.

Tata Letak

Untuk mengisi layar dengan lebih banyak informasi, Anda dapat menentukan tata letak yang berbeda, atau Anda dapat membuat tata letak secara dinamis untuk ukuran yang diminta. Ingat bahwa pembuatan secara dinamis umumnya tidak disarankan, tetapi terkadang boleh dilakukan.

Aplikasi yang tidak menggunakan sistem tata letak harus menghindari pemuatan ulang untuk perubahan konfigurasi, karena tindakan tersebut mungkin sangat memberatkan. Perubahan ini dapat terjadi karena alasan yang jelas seperti perubahan ukuran jendela, tetapi juga dapat terjadi karena alasan yang tidak jelas—seperti konversi mode perangkat. Misalnya, beralih dari laptop ke tablet akan melaporkan perubahan bahwa keyboard fisik tidak ada. Mulai ulang yang membuat pengguna menunggu atau bahkan kehilangan pekerjaan secara tiba-tiba bukanlah pengalaman yang baik.

Pastikan kode Anda tidak berupaya mengakses elemen UI yang telah hilang karena operasi pengubahan ukuran dinamis.

Memantau perubahan hierarki tampilan

Menambahkan caption kontrol jendela dapat menyebabkan beberapa masalah. Perhatikan saran berikut:

  • Jangan berharap konten Anda dimulai pada titik (0,0) di jendela. Konten jendela mungkin diimbangi oleh ketinggian caption. Lihat lokasi layar tampilan menggunakan View.getLocationInWindow() untuk mendapatkan offset yang benar.
  • Jangan mengira bahwa DecorView adalah pemegang contentView. Caption adalah bagian dari hierarki jendela, dan jika ada, caption akan berada di antara DecorView dan tampilan konten. Dengan demikian, ikuti perintah berikut:
    • Jangan ubah hierarki tampilan langsung di bawah DecorView.
    • Jangan berasumsi bahwa turunan dari DecorView adalah jenis LinearLayout.
  • Jangan berasumsi bahwa Configuration.screenHeightDp adalah tinggi area konten aplikasi Anda. Bagian ini diisi oleh tampilan caption, jika tinggi area konten aplikasi ada. Hal yang sama juga berlaku untuk Display.getSize(), dan seterusnya.

Pertimbangan lainnya

Berikut ini beberapa aspek lain yang perlu dipertimbangkan:

  • Jika aktivitas Anda selalu dimaksudkan agar berjalan di layar penuh, tambahkan flag android:resizeableActivity="false" ke manifes Anda.
  • Pengguna akhir disajikan dengan kontrol jendela untuk beralih antara semua tata letak yang tersedia. Dengan memilih opsi orientasi yang tepat, Anda dapat memastikan bahwa pengguna memiliki tata letak yang benar saat meluncurkan aplikasi. Jika aplikasi tersedia dalam mode potret dan lanskap, aplikasi akan menggunakan setelan default lanskap, jika memungkinkan. Setelah opsi ini disetel, opsi akan diingat pada basis per aplikasi.
  • Cobalah untuk menghindari perubahan orientasi yang tidak perlu. Misalnya, jika orientasi aktivitas adalah POTRET, tetapi aplikasi memanggil setRequestedOrientation(LANDSCAPE) saat waktu proses, ini akan menyebabkan pengubahan ukuran jendela yang tidak perlu, yang dapat mengganggu pengguna dan mungkin memulai ulang aplikasi jika aplikasi tidak dapat menanganinya. Opsi yang direkomendasikan adalah menyetel orientasi sekali, misalnya, di manifes, dan hanya mengubahnya jika perlu.
  • Jangan memanggil finish() dalam metode onDestroy aktivitas Anda. Tindakan ini menyebabkan aplikasi ditutup setelah mengubah ukuran dan tidak memulai ulang, dengan asumsi aplikasi Anda harus dimulai ulang.
  • Jangan gunakan jenis jendela yang tidak kompatibel, seperti TYPE_KEYGUARD dan TYPE_APPLICATION_MEDIA.

Catatan: Sebaiknya uji aplikasi untuk memastikan bahwa aplikasi menangani perubahan pada ukuran jendela dengan benar.