Pengelolaan jendela

ChromeOS mendukung aplikasi Android di beberapa jendela. Sistem merender aplikasi ke dalam penampung jendela yang ukurannya ditentukan oleh faktor bentuk perangkat, seperti ditunjukkan pada gambar 1.

Jendela aplikasi di perangkat yang berbeda.
Gambar 1.: Teks akan ditampilkan di sini.

Gambar 1. Jendela aplikasi di perangkat yang berbeda.

Penting untuk mendesain tata letak yang berfungsi dengan berbagai ukuran layar. Jika Anda mengikuti panduan Android untuk mendukung berbagai ukuran layar, aplikasi Anda juga akan berfungsi dengan baik saat berjalan di ChromeOS.

Halaman ini menunjukkan cara membantu jendela aplikasi Anda diluncurkan dengan benar, mengubah ukurannya dengan lancar, dan menampilkan semua kontennya saat ukurannya berubah.

Ukuran peluncuran awal

Aplikasi dapat meminta ukuran peluncuran awal dengan cara berikut:

  • Menggunakan ukuran peluncuran hanya di lingkungan desktop. Tindakan ini membantu pengelola jendela memberi Anda batas dan orientasi yang tepat. Untuk menunjukkan preferensi jika digunakan dalam mode desktop, tambahkan tag meta berikut di dalam <activity>:

    &lt;meta-data android:name=&#34;WindowManagerPreference:FreeformWindowSize&#34;
               android:value=&#34;[phone|tablet|maximize]&#34; /&gt;
    &lt;meta-data android:name=&#34;WindowManagerPreference:FreeformWindowOrientation&#34;
               android:value=&#34;[portrait|landscape]&#34; /&gt;
    
  • Menggunakan batas peluncuran statis. Gunakan <layout> di dalam entri manifes aktivitas Anda untuk menentukan ukuran awal yang "tetap", seperti dalam contoh berikut:

    &lt;layout android:defaultHeight=&#34;500dp&#34;
                android:defaultWidth=&#34;600dp&#34;
                android:gravity=&#34;top|end&#34;
                android:minHeight=&#34;450dp&#34;
                android:minWidth=&#34;300dp&#34; /&gt;
    
  • Menggunakan batas peluncuran dinamis. Suatu aktivitas dapat membuat dan menggunakan ActivityOptions.setLaunchBounds(Rect) saat membuat aktivitas baru. Dengan menentukan persegi panjang kosong, aplikasi Anda dapat diluaskan maksimal.

Mengubah ukuran jendela

Di ChromeOS, pengguna dapat mengubah ukuran jendela aplikasi dengan cara biasa: dengan menarik sudut kanan bawah, seperti yang ditunjukkan pada gambar 2.

Gambar 2.: Teks akan ditampilkan di sini.

Gambar 2. Jendela aplikasi yang dapat diubah ukurannya.

Ada dua opsi untuk menangani pengubahan ukuran jendela saat menggunakan class View:

  • Tanggapi perubahan konfigurasi secara dinamis dengan memanggil onConfigurationChanged(..). Sebagai contoh, Anda dapat menambahkan android:configChanges="screenSize|smallestScreenSize|orientation|screenLayout" ke manifes aktivitas. Untuk mengetahui informasi selengkapnya tentang cara menangani perubahan konfigurasi, baca Menangani perubahan konfigurasi.
  • Biarkan sistem memulai ulang aktivitas. Dalam hal ini, terapkan onSaveInstanceState dan gunakan komponen arsitektur ViewModel untuk memulihkan status tersimpan sebelumnya.

Saat menggunakan Jetpack Compose, perilaku pengubahan ukuran bergantung pada cara konfigurasi aktivitas Anda. Jika menangani perubahan secara dinamis, rekomposisi dipicu saat ukuran jendela berubah. Jika aktivitas dimulai ulang oleh sistem, komposisi awal terjadi setelah dimulai ulang. Bagaimanapun juga, penting untuk membuat tata letak Compose yang beradaptasi dengan perubahan ukuran jendela. Jangan mengasumsikan ukuran tetap.

Dimensi jendela

Buat aktivitas Anda membaca dimensi jendelanya setiap kali dimulai dan mengatur kontennya sesuai dengan konfigurasi saat ini.

Untuk menentukan konfigurasi saat ini, panggil getResources().getConfiguration() pada aktivitas saat ini. Jangan gunakan konfigurasi aktivitas latar belakang atau resource sistem. Aktivitas latar belakang tidak memiliki ukuran, dan konfigurasi sistem mungkin berisi beberapa jendela dengan orientasi dan ukuran yang bertentangan, sehingga tidak ada data yang dapat digunakan yang dapat diekstrak.

Perhatikan bahwa ukuran jendela dan ukuran layar tidak sama. Untuk mendapatkan ukuran jendela di DP, gunakan Activity.getResources().getConfiguration().screenWidth dan Activity.getResources().getConfiguration().screenHeight. Anda mungkin tidak perlu menggunakan ukuran layar.

Batas konten

Batas konten jendela dapat berubah setelah mengubah ukuran. Misalnya, area dalam jendela yang digunakan oleh aplikasi dapat berubah jika jendela menjadi terlalu besar untuk masuk ke layar. Ikuti pedoman berikut:

  • Aplikasi yang menggunakan proses tata letak Android akan secara otomatis diletakkan di ruang yang tersedia.
  • Aplikasi native perlu 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 menggunakan observer:

    • NativeActivity.onContentRectChangedNative()
    • NativeActivity.onGlobalLayout()
    • Tambahkan pemroses ke view.addOnLayoutChangeListener(findViewById(android.R.id.content))

    Jika aplikasi melakukan prapenskalaan pada elemen visualnya, lakukan tindakan ini setiap kali resolusi berubah.

Mengubah ukuran dengan format bebas

ChromeOS memungkinkan jendela apa pun diubah ukurannya secara bebas: pengguna dapat mengubah lebar, tinggi, dan posisi jendela di layar. Banyak aplikasi Android yang ditulis tanpa perlu mengubah ukuran dengan format bebas. Pertimbangkan masalah berikut:

  • Posisi layar mungkin berubah. Selalu gunakan sistem untuk melakukan transformasi koordinat jendela ke layar dan sebaliknya.
  • Jika Anda menggunakan sistem tampilan Android, tata letak jendela akan berubah secara otomatis saat ukurannya berubah.
  • Jika Anda tidak menggunakan sistem tampilan dan mengambil alih permukaan, aplikasi Anda harus menangani perubahan ukurannya sendiri.
  • Untuk aplikasi native, gunakan anggota mLastContent atau gunakan tampilan konten untuk menentukan ukuran awal.
  • Saat aplikasi berjalan, proses peristiwa onContentRectChangedNative atau onGlobalLayout untuk menanggapi perubahan ukuran.
  • Jika ukurannya berubah, ubah skala atau muat ulang tata letak dan elemen visual serta perbarui area input.

Mode layar penuh

Mode layar penuh berfungsi sama seperti di Android. Jika jendela tidak menutupi layar sepenuhnya, permintaan untuk menampilkan layar penuh (menyembunyikan semua elemen UI sistem) akan diabaikan. Jika jendela aplikasi diluaskan maksimal, metode, tata letak, dan fungsi normal mode layar penuh akan diterapkan. Ini akan menyembunyikan elemen UI sistem (panel kontrol jendela dan rak).

Orientasi layar

Orientasi yang paling umum untuk aplikasi Android adalah potret, karena sebagian besar ponsel dipegang dengan cara ini. Meskipun potret baik untuk ponsel, namun buruk untuk laptop dan tablet. Lanskap lebih disukai. Untuk mendapatkan hasil terbaik bagi aplikasi Anda, pertimbangkan untuk mendukung kedua orientasi.

Beberapa aplikasi Android berasumsi bahwa jika perangkat dipegang dalam mode potret, nilai rotasi adalah Surface.ROTATION_0. Hal ini mungkin berlaku untuk sebagian besar perangkat Android. Namun, saat aplikasi berada dalam mode ARC tertentu, nilai rotasi untuk orientasi potret mungkin bukanlah Surface.ROTATION_0.

Untuk mendapatkan nilai rotasi yang akurat saat membaca akselerometer atau sensor yang serupa, gunakan metode Display.getRotation() dan ganti sumbunya dengan yang sesuai.

Aktivitas dan orientasi root

Jendela Chromebook terdiri dari setumpuk jendela aktivitas. Setiap jendela dalam tumpukan ini memiliki ukuran dan orientasi yang sama.

Perubahan orientasi dan ukuran secara tiba-tiba akan membingungkan jika terjadi di lingkungan desktop. Pengelola jendela Chromebook menghindari hal ini dengan cara yang serupa dengan mode berdampingan Android: aktivitas di bagian bawah tumpukan mengontrol atribut semua aktivitas di atasnya. Hal ini dapat menyebabkan situasi yang tidak terduga jika aktivitas yang baru dimulai, yaitu potret yang tidak dapat diubah ukurannya, menjadi lanskap yang dapat diubah ukurannya.

Mode perangkat memiliki efek, yaitu: dalam mode tablet, orientasi tidak dikunci, dan setiap jendela mempertahankan orientasinya sendiri, seperti biasanya di Android.

Panduan orientasi

Ikuti panduan penanganan orientasi berikut:

  • Jika Anda hanya mendukung satu orientasi, tambahkan informasi ke manifes sehingga pengelola jendela mengetahuinya sebelum memulai aplikasi. Saat Anda menentukan orientasi, tentukan juga orientasi sensor jika memungkinkan. Chromebook sering kali berjenis konvertibel, dan aplikasi yang terbalik akan memberikan pengalaman pengguna yang buruk.
  • Cobalah untuk tetap menggunakan satu orientasi yang dipilih. Hindari meminta satu orientasi dalam manifes dan menetapkan orientasi lainnya secara terprogram nanti.
  • Berhati-hatilah saat mengubah orientasi berdasarkan ukuran jendela. Pengguna mungkin terperangkap di jendela ukuran potret yang kecil dan tidak dapat kembali ke jendela lanskap yang lebih besar.
  • Ada kontrol jendela di Chrome untuk beralih antara semua tata letak yang tersedia. Dengan memilih opsi orientasi yang tepat, Anda dapat memastikan bahwa pengguna memiliki tata letak yang benar setelah meluncurkan aplikasi. Jika aplikasi tersedia dalam mode potret dan lanskap, tetapkan ke lanskap secara default, 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) pada runtime, hal ini menyebabkan pengubahan ukuran jendela yang tidak perlu, yang mengganggu pengguna dan mungkin memulai ulang aplikasi jika aplikasi tidak dapat menanganinya. Sebaiknya Anda menetapkan orientasi sekali, misalnya, dalam manifes, dan hanya mengubahnya jika perlu.

Pertimbangan lainnya

Berikut beberapa hal lain yang perlu dipertimbangkan saat menggunakan aplikasi Android di ChromeOS:

  • Jangan panggil finish() dalam metode onDestroy aktivitas Anda. Tindakan ini menyebabkan aplikasi ditutup setelah mengubah ukuran dan tidak dimulai ulang.
  • Jangan gunakan jenis jendela yang tidak kompatibel, seperti TYPE_KEYGUARD dan TYPE_APPLICATION_MEDIA.
  • Pastikan mulai ulang aktivitas dapat dilakukan secara cepat dengan meng-cache objek yang telah Anda alokasikan sebelumnya.
  • Jika Anda tidak ingin pengguna mengubah ukuran aplikasi, tentukan android:resizeableActivity=false dalam file manifes Anda.
  • Uji aplikasi Anda untuk memastikan bahwa aplikasi dapat menangani perubahan ukuran jendela dengan tepat.