Menyesuaikan Preferensi UI Mobil

Artikel ini menjelaskan cara menggunakan dan menyesuaikan elemen dalam paket com.android.car.ui.preference , yang menyertakan elemen UI yang dapat digunakan untuk menyajikan preferensi aplikasi.

Sebagian besar elemen adalah subkelas kelas com.androidx.preference yang Anda tambahkan penyesuaian CarUi. Dalam kebanyakan kasus, Anda dapat menggunakan elemen dalam paket com.android.car.ui.preferences dengan menggunakan com.android.car.PreferenceFragment . PreferenceFragment menggantikan semua elemen androidx.preference dengan padanannya di car.ui.preferences . Untuk melihat fungsionalitas ini dalam tindakan, lihat aplikasi referensi Paintbooth car-ui-lib. Sebagai contoh:

Tata letak preferensi UI mobil

Gambar 1. Tata letak preferensi UI mobil.

Jenis Preferensi yang Tersedia

PreferensiFragmen

PreferenceFragment adalah subkelas dari androidx.preference.PreferenceFragmentCompat dan merupakan kelas dasar yang harus digunakan klien. Selama panggilan ke setPreferenceScreen , kelas ini secara otomatis mengganti elemen dari androidx.preference dengan padanan yang tersedia dari elemen car.ui.preference .

<style name="PreferenceFragment.CarUi">
        <item name="android:divider">?android:attr/listDivider</item>
        <item name="android:layout">@layout/car_ui_preference_fragment_with_toolbar</item>
</style>

Preferensi MobilUi

Ini adalah setara CarUi dari kelas androidx.preference.Preference yang mendukung atribut berikut, yang dapat dikustomisasi menggunakan Runtime Resource Overlay (RRO). Semua elemen CarUi lainnya yang menggunakan varian gaya CarUiPreference juga mendukung atribut berikut.

<declare-styleable name="CarUiPreference">
      <!-- Toggle for showing chevron -->
      <attr name="showChevron" format="boolean" />
      <!-- Show ripple when disabled preference is clicked -->
      <attr name="showRippleOnDisabledPreference" format="boolean" />
</declare-styleable>

Berikut ini adalah gaya dasar untuk com.android.car.ui.preference , yang memperluas tema androidx.Preference . Sumber daya dapat digambar untuk chevron didefinisikan di car_ui_preference_icon_chevron.xml .

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:drawable="@drawable/car_ui_preference_icon_chevron_disabled"/>
  <item android:state_enabled="true" android:drawable="@drawable/car_ui_preference_icon_chevron_enabled"/>
</selector>

ripple didefinisikan dalam car_ui_recyclerview_button_ripple_background .

<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/car_ui_ripple_color" />
<style name="Preference.CarUi">
        <item name="allowDividerBelow">false</item>
        <item name="allowDividerAbove">false</item>
        <item name="android:layout">@layout/car_ui_preference</item>
</style>

Jika tata letak dalam gaya di atas sedang dilapis, klien perlu memastikan tata letak baru setidaknya menyediakan id yang diharapkan oleh kelas androidx yang sesuai. Ini juga berlaku untuk elemen lain yang menggunakan gaya dasar ini.

Preferensi MobilUiDropDown

Ini adalah setara CarUi dari kelas androidx.preference.DropDownPreference dan menggunakan gaya berikut:

<style name="Preference.CarUi.DropDown">
        <item name="android:layout">@layout/car_ui_preference_dropdown</item>
</style>

Preferensi CarUiRadioButton

Subkelas androidx.preference.TwoStatePreference ini mengembangkan tata letak car_ui_radio_button_preference_widget selama inisialisasi. Jika tata letak ini dilapis dalam RRO, tata letak baru harus berisi elemen bertipe android.widget.RadioButton , dengan id R.id.radio_button dan juga harus berisi elemen dan id lain yang diperlukan oleh kelas dasar.

Preferensi CarUiSwitch

Ini adalah setara CarUi dari kelas androidx.preference.SwitchPreference . Perbedaannya adalah ketika elemen ini tidak diaktifkan, pesan toast akan ditampilkan. Pesan toast dapat disesuaikan dengan memanggil metode setMessageToShowWhenDisabledPreferenceClicked di Android 10 dan Android 11. Elemen ini menggunakan gaya berikut:

<style name="Preference.CarUi.SwitchPreference">
        <item name="android:widgetLayout">@layout/car_ui_preference_widget_switch</item>
        <item name="android:switchTextOn">@string/car_ui_preference_switch_on</item>
        <item name="android:switchTextOff">@string/car_ui_preference_switch_off</item>
</style>

Preferensi CarUiTwoAction

Subkelas CarUiPreference yang memungkinkan tindakan sekunder. Atribut yang dapat digunakan untuk menyesuaikan elemen ini disediakan di bawah ini:

<declare-styleable name="CarUiTwoActionPreference">
        <!-- Determines if the secondary action is initially shown -->
        <attr name="actionShown" format="boolean"/>
</declare-styleable>

Elemen ini menggunakan gaya yang sama dengan kelas dasar dan membutuhkan R.id.action_widget_container , dan android.R.id.widget_frame .

CarUiDialogFragment

Kelas ini dipinjam dari androidx.preference.PreferenceDialogFragmentCompat dengan beberapa tambahan khusus untuk CarUi. Klien harus menggunakan subkelas dari kelas ini untuk menyajikan platform bertema AlertDialog .

PreferenceDialogFragment

Subkelas langsung dari CarUiDialogFragment . Klien harus mensubklasifikasikan kelas ini untuk menampilkan platform bertema AlertDialog .

CarUiEditTextPreference

Ini adalah padanan CarUi dari kelas androidx.preference.EditTextPreference :

<style name="Preference.CarUi.DialogPreference.EditTextPreference">
        <item name="android:dialogLayout">@layout/car_ui_preference_dialog_edittext</item>
</style>

Jika tata letak dalam gaya di atas sedang dilapis, klien perlu memastikan tata letak baru menyediakan id yang diharapkan oleh kelas androidx.preference.EditTextPreference .

EditTextPreferenceDialogFragment

Subkelas langsung dari PreferenceDialogFragment . Juga, CarUi setara dengan kelas androidx.preference.PreferenceDialogFragments . Klien harus menggunakan kelas ini untuk menyajikan platform bertema AlertDialog .

CarUiSeekBarDialogPreference

Implementasi kelas androidx.preference.DialogPreference , yang menyediakan fungsionalitas SeekBar :

<style name="Preference.CarUi.SeekBarPreference">
        <item name="android:layout">@layout/car_ui_preference_widget_seekbar</item>
        <item name="adjustable">true</item>
        <item name="showSeekBarValue">false</item>
</style>

SeekBarPreferenceDialogFragment

Fragmen yang menyediakan tata letak dengan SeekBar dalam dialog.

Preferensi Daftar Mobil

CarUi setara dengan kelas androidx.preference.ListPreference .

DaftarPreferenceFragment

Fragmen yang menyediakan tata letak dengan androidx.preference.ListPreference di dalamnya.

CarUiMultiSelectListPreference

Setara CarUi dari kelas androidx.preference.Preference .

MultiSelectListPreferenceFragment

Fragmen yang menyediakan tata letak dengan com.android.car.ui.CarUiMultiSelectListPreference di dalamnya.