本頁面說明如何在 com.android.car.ui.preference
套件中使用及自訂元素,包括可用於顯示應用程式偏好設定的 UI 元素。
大多數元素會子類別化 com.androidx.preference
類別,您可在這些類別中新增 CarUi 自訂設定。在大多數情況下,您可以使用 com.android.car.PreferenceFragment
來使用 com.android.car.ui.preferences
套件中的元素。PreferenceFragment
會將所有 androidx.preference
元素替換為 car.ui.preferences
中的同等元素。如要查看這些功能的實際運作情形,請參閱 car-ui-lib Paintbooth 參考應用程式。例如:
圖 1. Car UI 偏好設定版面配置。
可用的偏好設定類型
本節將說明 Car UI 偏好設定類型。
PreferenceFragment
PreferenceFragment
是 androidx.preference.PreferenceFragmentCompat
的子類別,也是用戶端應使用的基礎類別。在呼叫 setPreferenceScreen
期間,這個類別會自動將 androidx.preference
中的元素替換成 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
這是 androidx.preference.Preference
類別的 CarUi 等價物,可支援下列屬性,這些屬性可使用執行階段資源覆蓋 (RRO) 自訂。所有使用 CarUiPreference
樣式變化版本的 CarUi 元素也支援下列屬性。
<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>
以下是 com.android.car.ui.preference
的基本樣式,可延伸 androidx.Preference
主題。chevron
可繪項目是在 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
是在 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>
如果要重疊上述樣式的版面配置,用戶端必須確保新版面配置至少提供對應 androidx
類別所需的 ID。這也適用於使用這個基本樣式的其他元素。
CarUiDropDownPreference
這相當於 androidx.preference.DropDownPreference
類別的 CarUi,並採用以下樣式:
<style name="Preference.CarUi.DropDown"> <item name="android:layout">@layout/car_ui_preference_dropdown</item> </style>
CarUiRadioButtonPreference
這個 androidx.preference.TwoStatePreference
子類會在初始化期間加載 car_ui_radio_button_preference_widget
版面配置。如果這個版面配置會在 RRO 中重疊,則新版面配置必須包含 android.widget.RadioButton
類型的元素,並且具有 R.id.radio_button
的 ID,也必須包含基礎類別所需的其他元素和 ID。
CarUiSwitchPreference
這相當於 androidx.preference.SwitchPreference
類別的 CarUi。差異在於,如果未啟用這個元素,系統會顯示浮動式訊息。您可以在 Android 10 和 Android 11 中呼叫 setMessageToShowWhenDisabledPreferenceClicked
方法,自訂 Toast 訊息。這個元素使用以下樣式:
<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
可啟用次要動作的 CarUiPreference
子類別。以下提供可用來自訂此元素的屬性:
<declare-styleable name="CarUiTwoActionPreference"> <!-- Determines if the secondary action is initially shown --> <attr name="actionShown" format="boolean"/> </declare-styleable>
此元素使用與基礎類別相同的樣式,且需要 R.id.action_widget_container
和 android.R.id.widget_frame
。
CarUiDialogFragment
這個類別是從 androidx.preference.PreferenceDialogFragmentCompat
原封不動借用,並加入一些 CarUi 專屬項目。用戶端應使用此類別的子類別,呈現主題式平台 AlertDialog
。
PreferenceDialogFragment
CarUiDialogFragment
的直接子類別。用戶端應將此類別設為子類別,以顯示任何主題的平台 AlertDialog
。
CarUiEditTextPreference
這相當於 CarUi 與 androidx.preference.EditTextPreference
類別:
<style name="Preference.CarUi.DialogPreference.EditTextPreference"> <item name="android:dialogLayout">@layout/car_ui_preference_dialog_edittext</item> </style>
如果要重疊上述樣式的版面配置,用戶端必須確保新版面配置提供 androidx.preference.EditTextPreference
類別預期的 ID。
編輯文字偏好設定對話方塊片段
PreferenceDialogFragment
的直接子類別。以及 androidx.preference.PreferenceDialogFragments
類別的 CarUi 等效項目。用戶端應使用這個類別,呈現任何主題平台 AlertDialog
。
CarUiSeekBarDialogPreference
androidx.preference.DialogPreference
類別的實作方式,可提供 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
在對話方塊中提供 SeekBar 版面配置的片段。
CarUiListPreference
androidx.preference.ListPreference
類別的 CarUi 等價。
清單偏好設定片段
提供內含 androidx.preference.ListPreference
的版面配置的片段。
CarUiMultiSelectListPreference
CarUi 相當於 androidx.preference.Preference
類別。
MultiSelectListPreferenceFragment
提供具有 com.android.car.ui.CarUiMultiSelectListPreference
版面配置的片段。