Tuỳ chỉnh các lựa chọn ưu tiên về giao diện người dùng trên ô tô

Trang này mô tả cách sử dụng và tuỳ chỉnh các phần tử trong gói com.android.car.ui.preference, bao gồm các phần tử giao diện người dùng có thể dùng để hiển thị các lựa chọn ưu tiên cho ứng dụng.

Hầu hết các phần tử đều là lớp con của các lớp com.androidx.preference mà bạn thêm tuỳ chỉnh CarUi. Trong hầu hết các trường hợp, bạn có thể sử dụng các phần tử trong gói com.android.car.ui.preferences bằng cách sử dụng com.android.car.PreferenceFragment. PreferenceFragment thay thế tất cả các phần tử androidx.preference bằng các phần tử tương đương trong car.ui.preferences. Để xem các chức năng này hoạt động, hãy xem ứng dụng tham khảo Paintbooth car-ui-lib. Ví dụ:

Bố cục lựa chọn ưu tiên về giao diện người dùng trên ô tô

Hình 1. Bố cục lựa chọn ưu tiên về giao diện người dùng trên ô tô.

Các loại lựa chọn ưu tiên có sẵn

Phần này mô tả các loại lựa chọn ưu tiên về giao diện người dùng trên ô tô.

PreferenceFragment

PreferenceFragment là lớp con của androidx.preference.PreferenceFragmentCompat và là lớp cơ sở mà ứng dụng nên sử dụng. Trong lệnh gọi đến setPreferenceScreen, lớp này sẽ tự động thay thế các phần tử từ androidx.preference bằng các phần tử tương đương có sẵn từ 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>

CarUiPreference

Đây là CarUi tương đương với lớp androidx.preference.Preference hỗ trợ các thuộc tính sau. Bạn có thể tuỳ chỉnh các thuộc tính này bằng lớp phủ tài nguyên thời gian chạy (RRO). Tất cả các phần tử CarUi khác sử dụng biến thể của kiểu CarUiPreference cũng hỗ trợ các thuộc tính sau.

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

Sau đây là kiểu cơ sở cho com.android.car.ui.preference, mở rộng giao diện androidx.Preference. Đối tượng có thể vẽ chevron được xác định trong 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 được xác định trong 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>

Nếu bố cục theo kiểu ở trên đang được phủ lên, thì ứng dụng cần đảm bảo rằng bố cục mới ít nhất cung cấp các mã nhận dạng mà các lớp androidx tương ứng dự kiến. Điều này cũng áp dụng cho các phần tử khác sử dụng kiểu cơ sở này.

CarUiDropDownPreference

Đây là CarUi tương đương với lớp androidx.preference.DropDownPreference và sử dụng kiểu sau:

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

CarUiRadioButtonPreference

Lớp con này của androidx.preference.TwoStatePreference tăng cường bố cục car_ui_radio_button_preference_widget trong quá trình khởi chạy. Nếu bố cục này đang được phủ trong một RRO, thì bố cục mới phải chứa một phần tử thuộc loại android.widget.RadioButton, có mã nhận dạng R.id.radio_button và cũng phải chứa các phần tử và mã nhận dạng khác mà lớp cơ sở yêu cầu.

CarUiSwitchPreference

Đây là CarUi tương đương với lớp androidx.preference.SwitchPreference. Điểm khác biệt là khi phần tử này không được bật, một thông báo ngắn sẽ xuất hiện. Bạn có thể tuỳ chỉnh thông báo ngắn bằng cách gọi phương thức setMessageToShowWhenDisabledPreferenceClicked trong Android 10 và Android 11. Phần tử này sử dụng kiểu sau:

<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

Một lớp con của CarUiPreference cho phép một hành động phụ. Dưới đây là các thuộc tính có thể dùng để tuỳ chỉnh phần tử này:

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

Phần tử này sử dụng cùng một kiểu với lớp cơ sở và yêu cầu R.id.action_widget_containerandroid.R.id.widget_frame.

CarUiDialogFragment

Lớp này được mượn nguyên trạng từ androidx.preference.PreferenceDialogFragmentCompat với một số nội dung bổ sung dành riêng cho CarUi. Ứng dụng nên sử dụng các lớp con của lớp này để hiển thị nền tảng theo chủ đề AlertDialog.

PreferenceDialogFragment

Một lớp con trực tiếp của CarUiDialogFragment . Ứng dụng nên tạo lớp con cho lớp này để hiển thị bất kỳ nền tảng theo chủ đề nào AlertDialog.

CarUiEditTextPreference

Đây là CarUi tương đương với lớp androidx.preference.EditTextPreference:

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

Nếu bố cục theo kiểu ở trên đang được phủ lên, thì ứng dụng cần đảm bảo bố cục mới cung cấp các mã nhận dạng mà lớp androidx.preference.EditTextPreference dự kiến.

EditTextPreferenceDialogFragment

Một lớp con trực tiếp của PreferenceDialogFragment. Ngoài ra, CarUi tương đương với lớp androidx.preference.PreferenceDialogFragments. Ứng dụng nên sử dụng lớp này để trình bày mọi nền tảng theo chủ đề AlertDialog.

CarUiSeekBarDialogPreference

Cách triển khai lớp androidx.preference.DialogPreference, cung cấp chức năng 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

Một mảnh cung cấp bố cục có SeekBar trong hộp thoại.

CarUiListPreference

CarUi tương đương với lớp androidx.preference.ListPreference.

ListPreferenceFragment

Một mảnh cung cấp bố cục có androidx.preference.ListPreference trong đó.

CarUiMultiSelectListPreference

CarUi tương đương với lớp androidx.preference.Preference.

MultiSelectListPreferenceFragment

Một mảnh cung cấp bố cục có com.android.car.ui.CarUiMultiSelectListPreference trong đó.