Menyesuaikan toolbar dengan overlay resource runtime

Ringkasan tata letak dasar

Toolbar car-ui-lib disesuaikan melalui file tata letak car_ui_base_layout_toolbar.xml. Ini disebut toolbar *tata letak dasar* karena file tata letak ini berisi FrameLayout dengan ID car_ui_base_layout_content_container, yang akan berisi semua konten aplikasi segera setelah tata letak di-inflate. Struktur ini memungkinkan OEM menempatkan toolbar di lokasi selain bagian atas layar.

Kemungkinan tata letak
Tata Letak Toolbar 1 Tata Letak Toolbar 2 Tata Letak Toolbar 3
Tata Letak Toolbar 4 Tata Letak Toolbar 5 Tata Letak Toolbar 6

Dengan mengubah parameter tata letak di car_ui_base_layout_content_container, aplikasi dapat dikompresi ke area yang lebih kecil untuk memberi ruang bagi toolbar. Namun, beberapa penyesuaian mungkin memerlukan toolbar untuk menjadi transparan dan ditempatkan di atas aplikasi. Dalam hal ini, tampilan dapat diberi tag dengan car_ui_top/bottom/left/right_inset. Jika car-ui-lib mendeteksi tampilan dengan tag tersebut, car-ui-lib akan menyampaikan posisi dan dimensi tampilan tersebut ke aplikasi, sehingga dapat membuat indentasi konten ke dalam dengan jumlah tersebut, tetapi tetap mempertahankan latar belakang yang wajar di ruang di bawah toolbar. Misalnya, sebagian besar aplikasi akan memiliki item pertama di CarUiRecyclerView yang dimulai di bawah inset yang ditentukan, tetapi masih terlihat di belakang toolbar saat pengguna men-scroll ke bawah.

Dukungan tombol putar

Untuk mendukung pengontrol rotasi, tata letak dasar harus berisi FocusParkingView sesegera mungkin dalam tata letak. Tampilan ini adalah yang difokuskan saat tidak ada fokus yang terlihat oleh pengguna. Toolbar juga harus digabungkan dalam FocusParkingView, yang menentukan bahwa toolbar tersebut adalah zona dorong terpisah untuk pengontrol rotasi. Jika tidak digabungkan dalam FocusParkingView, pengguna tidak dapat berinteraksi dengan toolbar menggunakan pengontrol dari alat rotasi.

Tab

Tab toolbar disesuaikan oleh file tata letak car_ui_toolbar_tab_item.xml atau car_ui_toolbar_tab_item_flexible.xml. Tidak ada perbedaan fungsional antara file, resource Boolean car_ui_toolbar_tab_flexible_layout menentukan file mana yang digunakan. Oleh karena itu, sebaiknya tetap tetapkan car_ui_toolbar_tab_flexible_layout ke false dan hanya sesuaikan file tata letak reguler.

ImageView tab akan diberi tint dengan warna car_ui_toolbar_tab_item_selector dalam kode Java, sehingga car_ui_toolbar_tab_item_selector harus disesuaikan bersama tata letak. Aplikasi juga dapat meminta agar ikon tab-nya tidak diberi tint dengan warna ini.

TextView tab memiliki tampilan teks yang disetel ke TextAppearance.CarUi.Widget.Toolbar.Tab atau TextAppearance.CarUi.Widget.Toolbar.Tab.Selected dalam kode Java, sehingga tampilan teks yang ditetapkan pada file tata letak tidak akan diterapkan. Gaya ini juga harus disesuaikan.

MenuItems adalah tombol di sudut kanan atas toolbar default. Elemen ini dapat berupa teks, ikon, ikon dan teks, atau tombol. Semua variasi ini adalah bagian dari file tata letak car_ui_toolbar_menu_item, karena MenuItems harus dapat berubah di antara setiap formulir jika aplikasi memintanya.

MenuItems dapat berupa utama, yang meng-inflate file tata letak yang berbeda: car_ui_toolbar_menu_item_primary. MenuItem utama harus terlihat secara visual berbeda dari MenuItem normal, misalnya melalui tombol dengan batas/tanpa batas. Secara default, car_ui_toolbar_menu_item_primary hanya mengalihkan ke car_ui_toolbar_menu_item, sehingga keduanya terlihat sama.

MenuItems dapat diaktifkan, yang merupakan status visual lain yang menunjukkan bahwa MenuItem ini diaktifkan. Status ini diterapkan dengan memanggil setActivated(true) di tampilan MenuItem, yang menambahkan status state_activated ke semua drawable di tampilan MenuItem. Status drawable ini dapat direspons dengan pemilih drawable di overlay resource runtime (RRO).

MenuItems dapat dibatasi UX saat kendaraan bergerak. UX yang dibatasi hanya status drawable lain seperti diaktifkan, tetapi kali ini status ditentukan di aplikasi, bukan framework Android. Artinya, atribut state_ux_restricted juga harus ditumpangkan dengan RRO, sehingga atribut yang ditentukan dalam RRO cocok dengan atribut yang ditentukan dalam aplikasi.

Kotak penelusuran terdapat dalam file tata letak car_ui_toolbar_search_view terpisah, untuk meningkatkan performa inflasi tata letak bagi aplikasi yang tidak memerlukan kotak penelusuran. FrameLayout dengan ID car_ui_toolbar_search_view_container akan berisi kotak penelusuran saat di-inflate.