Menyesuaikan preferensi UI Mobil

Halaman ini menjelaskan cara menggunakan dan menyesuaikan elemen dalam paket com.android.car.ui.preference, yang mencakup elemen UI yang dapat digunakan untuk menampilkan preferensi untuk aplikasi.

Sebagian besar elemen adalah subclass class com.androidx.preference tempat Anda menambahkan penyesuaian CarUi. Pada umumnya, Anda dapat menggunakan elemen dalam paket com.android.car.ui.preferences dengan menggunakan com.android.car.PreferenceFragment. PreferenceFragment mengganti semua elemen androidx.preference dengan elemen yang setara di car.ui.preferences. Untuk melihat cara kerja fungsi ini, lihat aplikasi referensi car-ui-lib Paintbooth. Misalnya:

Tata letak preferensi UI mobil

Gambar 1. Tata letak preferensi UI Mobil.

Jenis preferensi yang tersedia

Bagian ini menjelaskan jenis preferensi UI Mobil.

PreferenceFragment

PreferenceFragment adalah subclass androidx.preference.PreferenceFragmentCompat dan merupakan class dasar yang harus digunakan klien. Selama panggilan ke setPreferenceScreen, class ini akan otomatis mengganti elemen dari androidx.preference dengan elemen yang setara dari elemen car.ui.preference yang tersedia.

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

CarUiPreference

Ini adalah CarUi yang setara dengan class androidx.preference.Preference yang mendukung atribut berikut, yang dapat disesuaikan menggunakan overlay resource runtime (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 adalah gaya dasar untuk com.android.car.ui.preference, yang memperluas tema androidx.Preference. Drawable chevron ditentukan 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 ditentukan di 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 ditempatkan, klien harus memastikan tata letak baru setidaknya memberikan ID yang diharapkan oleh class androidx yang sesuai. Hal ini juga berlaku untuk elemen lain yang menggunakan gaya dasar ini.

CarUiDropDownPreference

Ini adalah CarUi yang setara dengan class androidx.preference.DropDownPreference dan menggunakan gaya berikut:

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

CarUiRadioButtonPreference

Subclass androidx.preference.TwoStatePreference ini meng-inflate tata letak car_ui_radio_button_preference_widget selama inisialisasi. Jika tata letak ini ditempatkan di RRO, tata letak baru harus berisi elemen jenis android.widget.RadioButton, dengan ID R.id.radio_button dan juga harus berisi elemen dan ID lain yang diperlukan oleh class dasar.

CarUiSwitchPreference

Ini adalah CarUi yang setara dengan class androidx.preference.SwitchPreference. Perbedaannya adalah saat 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>

CarUiTwoActionPreference

Subclass CarUiPreference yang mengaktifkan tindakan sekunder. Atribut yang dapat digunakan untuk menyesuaikan elemen ini diberikan di bawah:

<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 class dasar dan memerlukan R.id.action_widget_container, dan android.R.id.widget_frame.

CarUiDialogFragment

Class ini dipinjam apa adanya dari androidx.preference.PreferenceDialogFragmentCompat dengan beberapa tambahan khusus untuk CarUi. Klien harus menggunakan subclass class ini untuk menampilkan AlertDialog platform bertema.

PreferenceDialogFragment

Subclass langsung dari CarUiDialogFragment . Klien harus membuat subclass class ini untuk menampilkan AlertDialog platform bertema apa pun.

CarUiEditTextPreference

Ini adalah CarUi yang setara dengan class 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 ditempatkan, klien harus memastikan tata letak baru menyediakan ID yang diharapkan oleh class androidx.preference.EditTextPreference.

EditTextPreferenceDialogFragment

Subclass langsung dari PreferenceDialogFragment. Selain itu, CarUi setara dengan class androidx.preference.PreferenceDialogFragments. Klien harus menggunakan class ini untuk menampilkan AlertDialog platform bertema apa pun.

CarUiSeekBarDialogPreference

Implementasi class androidx.preference.DialogPreference, yang menyediakan fungsi 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.

CarUiListPreference

CarUi setara dengan class androidx.preference.ListPreference.

ListPreferenceFragment

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

CarUiMultiSelectListPreference

CarUi yang setara dengan class androidx.preference.Preference.

MultiSelectListPreferenceFragment

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