Pengelolaan jendela

Chrome OS 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.

Gambar 1: Jendela aplikasi di perangkat yang berbeda

Mengubah ukuran jendela

Di Chrome OS, pengguna dapat mengubah ukuran jendela aplikasi dengan cara biasa, dengan menarik sudut kanan bawah, seperti ditunjukkan pada Gambar 2.

Gambar 2: Jendela aplikasi yang dapat diubah ukurannya

Ada dua opsi untuk menangani pengubahan ukuran jendela:

  • Tanggapi perubahan konfigurasi secara dinamis dengan memanggil onConfigurationChanged(..) dan menambahkan, misalnya, android:configChanges="screenSize|smallestScreenSize|orientation|screenLayout" ke manifes aktivitas. Baca dokumen menangani perubahan konfigurasi untuk mengetahui informasi selengkapnya tentang cara menangani perubahan konfigurasi.
  • Biarkan sistem memulai ulang aktivitas. Dalam hal ini, Anda harus menerapkan onSaveInstanceState dan menggunakan komponen arsitektur ViewModel untuk memulihkan status tersimpan sebelumnya.

Halaman ini menunjukkan cara memastikan jendela aplikasi berjalan dengan benar, berubah ukurannya dengan lancar, dan dapat menampilkan semua kontennya saat ukurannya berubah.

Dimensi jendela

Aktivitas harus membaca dimensi jendelanya setiap kali dimulai, dan mengelompokkan 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 bisa berubah saat 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 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()
    • Menambahkan pemroses ke view.addOnLayoutChangeListener(findViewById(android.R.id.content)) Jika aplikasi melakukan prapenskalaan pada elemen visualnya, aplikasi tersebut akan melakukan tindakan ini setiap kali resolusi berubah.

Mengubah ukuran dengan format bebas

Chrome OS 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.
  • Aplikasi native harus menggunakan anggota mLastContent, atau menggunakan tampilan konten untuk menentukan ukuran awal.
  • Saat aplikasi berjalan, aplikasi harus memproses peristiwa onContentRectChangedNative atau onGlobalLayout untuk menanggapi perubahan ukuran.
  • Jika ukurannya berubah, aplikasi harus mengubah skala atau memuat ulang tata letak, elemen visual, dan memperbarui area input.

Mode layar penuh

Mode layar penuh bekerja dengan cara yang sama seperti di Android. Jika jendela tidak menutupi layar sepenuhnya, permintaan untuk menampilkan layar penuh (menyembunyikan semua 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 akan selalu 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 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. 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 konvertibel dan aplikasi yang terbalik akan mengganggu.
  • 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 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) pada runtime, hal ini menyebabkan pengubahan ukuran jendela yang tidak perlu, yang mengganggu pengguna dan mungkin memulai ulang aplikasi jika Anda tidak dapat menanganinya. Sebaiknya Anda menetapkan orientasi sekali, misalnya, dalam manifes, dan hanya mengubahnya jika perlu.

Ukuran peluncuran awal

Aplikasi dapat menentukan 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>:

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

    <layout android:defaultHeight="500dp"
            android:defaultWidth="600dp"
            android:gravity="top|end"
            android:minHeight="450dp"
            android:minWidth="300dp" />
    
  • 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.

Pertimbangan lainnya

Berikut beberapa aspek lain yang perlu dipertimbangkan saat bekerja dengan aplikasi Android di Chrome OS:

  • 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.
  • 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.