本文介紹如何使用和自定義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.汽車 UI 首選項佈局。
可用的偏好類型
偏好片段
PreferenceFragment
是androidx.preference.PreferenceFragmentCompat
的子類,是客戶端應該使用的基類。在調用setPreferenceScreen
期間,此類自動將car.ui.preference
androidx.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>
汽車偏好
這是支持以下屬性的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
drawable 在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
的元素,ID R.id.radio_button
,並且還必須包含基類所需的其他元素和 ID。
CarUiSwitchPreference
這是androidx.preference.SwitchPreference
類的 CarUi 等效項。不同之處在於,當未啟用此元素時,會顯示一條 toast 消息。在 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
。
首選項對話框片段
CarUiDialogFragment
的直接子類。客戶應繼承此類以呈現任何主題平台AlertDialog
。
CarUiEditTextPreference
這是androidx.preference.EditTextPreference
類的 CarUi 等效項:
<style name="Preference.CarUi.DialogPreference.EditTextPreference"> <item name="android:dialogLayout">@layout/car_ui_preference_dialog_edittext</item> </style>
如果上面樣式中的佈局被覆蓋,客戶端需要確保新佈局提供androidx.preference.EditTextPreference
類期望的 id。
EditTextPreferenceDialogFragment
PreferenceDialogFragment
的直接子類。此外,CarUi 等效於androidx.preference.PreferenceDialogFragments
類。客戶應使用此類來呈現任何主題平台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
CarUi 相當於androidx.preference.ListPreference
類。
ListPreferenceFragment
提供帶有androidx.preference.ListPreference
的佈局的片段。
CarUiMultiSelectListPreference
androidx.preference.Preference
類的 CarUi 等效項。
MultiSelectListPreferenceFragment
提供佈局的片段,其中包含com.android.car.ui.CarUiMultiSelectListPreference
。