Setelan Mobil (packages/apps/Car/Settings
) disediakan khusus untuk
Android Automotive OS (AAOS). Setelan Mobil berbeda dengan Setelan Ponsel
(packages/apps/Settings
). Meskipun {i>Car Settings<i} berisi
beberapa pengaturan ponsel yang sudah dikenal,
{i>Car Settings<i} menyediakan antarmuka pengguna visual untuk mobil, pengoptimalan gangguan bagi pengemudi,
dan banyak titik entri penyesuaian untuk OEM.
Selain ringkasan Setelan Mobil yang disediakan di bawah, lihat hal terkait topik untuk mempelajari Setelan Mobil lebih lanjut:
- Menambahkan Setelan Mobil
- Mengatur Ulang Setelan Mobil
- Pengoptimalan Gangguan di Setelan Mobil
- Pengindeksan Penelusuran Setelan Mobil
- Penyesuaian Panel Ganda
Arsitektur dan panduan
Sebagian besar halaman di Setelan Mobil diimplementasikan sebagai serangkaian fragmen
yang memperluas SettingsFragment, masing-masing memiliki aktivitasnya sendiri yang ditentukan
CarSettingActivities. Aktivitas statis ini diperluas dari BaseCarSettingsActivity. Meskipun ada beberapa pengecualian untuk aturan ini, seperti beberapa fragmen khusus yang memperluas
BaseFragment, bukan SettingsFragment
, dan beberapa Aktivitas yang berada di luar CarSettingActivities, yang semuanya harus dianggap sebagai pengecualian (bukan sebagai pola yang diikuti).
Preferensi statis
Preferensi statis ditentukan dalam XML menggunakan Preference
atau CarUiPreference
. Implementasi SettingsFragment
menggunakan getPreferenceScreenResId()
untuk mendefinisikan file XML mana yang berisi daftar preferensi statis yang akan ditampilkan.
Preferensi dinamis
Preferensi dinamis menggunakan PreferenceGroup tag atau penerapan PreferenceGroup.
Dalam aplikasi CarSettings, preferensi dinamis mewakili serangkaian preferensi yang mengarahkan pengguna ke halaman tambahan dalam CarSettings, tetapi yang ditambahkan melalui opsi Preference Pengontrol, bukan dalam XML. Contohnya adalah Kelola keyboard preferensi di bagian Bahasa & Preferensi input yang secara dinamis menambahkan input ke halaman preferensi berdasarkan apakah diizinkan atau tidak.
Panel tindakan
Bagian atas setiap layar pengaturan memiliki bilah tindakan, yang dapat berisi "kembali" navigasi, judul layar, dan widget tindakan tambahan (misalnya, tombol dan tombol). Panel tindakan ini mirip dengan Logcat yang disediakan oleh Android, tetapi sebenarnya merupakan tampilan khusus. Di Android 11 dan yang lebih baru, metode ini disertakan dalam tata letak dasar sasis, yang berisi tampilan untuk {i>toolbar<i} dan {i>framelayout<i} untuk konten aplikasi lainnya.
Widget tindakan tambahan adalah class MenuItem dan harus dibuat di
onCreate
dari SettingsFragment
atau
BaseFragment
. Properti seperti visibilitas, status, dan sebagainya harus
dikontrol oleh penyetel dalam logika bisnis SettingsFragment
.
// ExampleSettingsFragment.java public class ExampleSettingsFragment extends SettingsFragment { @Override protected List<MenuItem> getToolbarMenuItems() { return Collections.singletonList(mClearConfirmButton); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mButton = new MenuItem.Builder(getContext()) .setTitle(R.string.text) .setOnClickListener(mOnClickListener) .setUxRestrictions(CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP) .build(); } private void updateState() { button.setVisible(false); } }
Bilah tindakan dilengkapi dengan dukungan untuk
Pengoptimalan Gangguan di Setelan Mobil.
Tetapkan UXRestrictions di MenuItem.Builder
saat pembuatan.
Pengontrol preferensi
Setiap halaman setelan dapat menampung sejumlah Preferensi.
Lihat gambar berikut untuk mengetahui keterkaitan komponen-komponen ini:
Gambar 1. Komponen CarSettings
PreferenceController
adalah komponen berbasis siklus proses yang membantu
mengenkapsulasi logika bisnis yang berkaitan dengan Preferensi tertentu.
PreferenceControllers
hanya dapat dilampirkan ke Preferensi yang relevan melalui
XML.
// example_settings_fragment.xml <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:settings="http://schemas.android.com/apk/res-auto" android:title="@string/example_settings_title"> <Preference android:key="@string/pk_example_preference_key" android:title="@string/example_preference_title" settings:controller="com.android.car.settings.example.ExamplePreferenceController"/> </PreferenceScreen>
Setelan Mobil secara eksplisit mencegah pembuatan PreferenceController
kode untuk memudahkan Anda mengubah hierarki Pengaturan dengan
perubahan pada kode Java.
Mungkin saja PreferenceController
memerlukan beberapa data dinamis
agar dapat beroperasi dengan benar. Misalnya, PreferenceController
yang menonaktifkan
notifikasi untuk aplikasi perlu mengetahui
aplikasi mana yang harus ditindaklanjuti.
Karena PreferenceControllers
selalu ditentukan dalam XML, tidak ada
untuk menyediakan argumen konstruktor tambahan. Sebaliknya, nilai-nilai tambahan ini
yang disediakan melalui penyetel publik pada PreferenceController
dan disetel menggunakan
use(...)
dari SettingsFragment
.
// ExamplePreferenceController.java public class ExamplePreferenceContorller extends PreferenceController<Preference> { private ExampleArg mExampleArg; public ExamplePreferenceController(...) { ... } public void setExampleArg(ExampleArg exampleArg) { mExampleArg = exampleArg; } } // ExampleSettingsFragment.java public class ExampleSettingsFragment extends SettingsFragment { @Override @XmlRes protected int getPreferenceScreenResId() { Return R.xml.example_settings_fragment; } @Override public void onAttach(Context context) { ExampleArg arg = (ExampleArg) getArguments().getSerializeable(ARG_KEY); ExamplePreferenceController controller = use(ExamplePreferenceController.class, R.string.pk_example_preference_key); controller.setExampleArg(arg); } }
Semakin sering metode use(...)
digunakan, semakin sulit untuk mempertahankan
tujuan awal untuk mengatur ulang hierarki
pengaturan dengan perubahan minimal,
kode Java, karena bagian besar dari kode fragmen yang ada perlu disalin ke
fragmen yang baru dibuat. Salah satu cara untuk meminimalkan kesulitan dalam melakukan hal ini adalah dengan:
- Minimalkan penggunaan
use(...)
. - Coba simpan setiap panggilan ke
use(...)
di satu tempat dalam fragmen (misalnya, dalam metodeonAttach()
).
Penanganan intent
Semua intent yang harus ditangani oleh aplikasi Car Settings didefinisikan dalam manifes . Intent umumnya ditentukan dan ditangani seperti kebanyakan aplikasi Android standar, dengan semua aktivitas dan filter intent yang ditentukan dalam manifes.
Mengubah fragmen root
Jika diinginkan, ikon Keluar dapat ditampilkan atau disembunyikan menggunakan config_show_settings_root_exit_icon
.
Menyesuaikan tema
Menyesuaikan atribut dan resource lainnya
Aplikasi Setelan Mobil terutama menggunakan CarSettingTheme
,
yang merupakan ekstensi dari Theme.CarUi
. Tema ini digunakan untuk menstandarkan
tampilan dan nuansa aplikasi sistem untuk
memastikan konsistensi dalam sistem.
Sesuaikan preferensi
Penyesuaian preferensi mencakup lokasi tambahan berikut:
- Tata letak beberapa class preferensi dasar ditentukan di
car_preference
dan overlaid untuk perakitan mobil. Setiap tata letak penyesuaian untuk class preferensi dasar dapat diganti di sini. - Car Settings menggunakan beberapa preferensi kustom yang terutama ditentukan di bagian
common
paket. Ini harus ditempatkan di dalam modul Setelan Mobil secara terpisah dari ke class preferensi dasar.