Este artículo describe cómo usar y personalizar elementos en el paquete com.android.car.ui.preference , que incluye elementos de la interfaz de usuario que se pueden usar para presentar preferencias para aplicaciones.
La mayoría de los elementos son clases de subclase com.androidx.preference a las que agrega personalizaciones de CarUi. En la mayoría de los casos, puedes usar los elementos del paquete com.android.car.ui.preferences usando com.android.car.PreferenceFragment . PreferenceFragment reemplaza todos los elementos androidx.preference con sus equivalentes en car.ui.preferences . Para ver estas funcionalidades en acción, consulte la aplicación de referencia Car-ui-lib Paintbooth. Por ejemplo:

Figura 1. Diseño de preferencias de la interfaz de usuario del automóvil.
Tipos de preferencias disponibles
Fragmento de preferencia
PreferenceFragment es una subclase de androidx.preference.PreferenceFragmentCompat y es la clase base que deben usar los clientes. Durante una llamada a setPreferenceScreen , esta clase reemplaza automáticamente los elementos de androidx.preference con el equivalente disponible de los elementos 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
Este es el equivalente de androidx.preference.Preference de la clase androidx.preference.Preference que admite los siguientes atributos, que se pueden personalizar mediante una superposición de recursos de tiempo de ejecución (RRO). Todos los demás elementos CarUi que usan una variante del estilo CarUiPreference también admiten los siguientes atributos.
<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>
El siguiente es el estilo base para com.android.car.ui.preference , que amplía el tema androidx.Preference . El elemento de diseño de chevron se define en 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>
La ripple se define en 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>
Si el diseño en el estilo anterior se superpone, los clientes deben asegurarse de que el nuevo diseño proporcione al menos los identificadores que esperan las clases de androidx correspondientes. Esto también se aplica a los otros elementos que usan este estilo base.
CarUiDropDownPreference
Este es el equivalente CarUi de la clase androidx.preference.DropDownPreference y usa el siguiente estilo:
<style name="Preference.CarUi.DropDown">
<item name="android:layout">@layout/car_ui_preference_dropdown</item>
</style>
CocheUiRadioBotónPreferencia
Esta subclase de androidx.preference.TwoStatePreference infla el diseño car_ui_radio_button_preference_widget durante la inicialización. Si este diseño se superpone en una RRO, el nuevo diseño debe contener un elemento de tipo android.widget.RadioButton , con id R.id.radio_button y también debe contener otros elementos e id requeridos por la clase base.
CarUiSwitchPreference
Este es el equivalente CarUi de la clase androidx.preference.SwitchPreference . La diferencia es que cuando este elemento no está habilitado, se muestra un mensaje de brindis. El mensaje del brindis se puede personalizar llamando al método setMessageToShowWhenDisabledPreferenceClicked en Android 10 y Android 11. Este elemento usa el siguiente estilo:
<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>
CocheUiDosAcciónPreferencia
Una subclase de CarUiPreference que habilita una acción secundaria. Los atributos que se pueden usar para personalizar este elemento se proporcionan a continuación:
<declare-styleable name="CarUiTwoActionPreference">
<!-- Determines if the secondary action is initially shown -->
<attr name="actionShown" format="boolean"/>
</declare-styleable>
Este elemento usa el mismo estilo que la clase base y requiere R.id.action_widget_container y android.R.id.widget_frame .
CocheUiDiálogoFragmento
Esta clase se toma prestada tal cual de androidx.preference.PreferenceDialogFragmentCompat con algunas adiciones específicas de CarUi. Los clientes deben usar subclases de esta clase para presentar la plataforma temática AlertDialog .
PreferenceDialogFragmentPreferenceDialogFragmentPreferenceDialogFragment
Una subclase directa de CarUiDialogFragment . Los clientes deben subclasificar esta clase para presentar cualquier AlertDialog de plataforma temática.
CarUiEditTextPreference
Este es el equivalente CarUi de la clase androidx.preference.EditTextPreference :
<style name="Preference.CarUi.DialogPreference.EditTextPreference">
<item name="android:dialogLayout">@layout/car_ui_preference_dialog_edittext</item>
</style>
Si el diseño en el estilo anterior se superpone, los clientes deben asegurarse de que el nuevo diseño proporcione los ID esperados por la clase androidx.preference.EditTextPreference .
EditTextPreferenceDialogFragment
Una subclase directa de PreferenceDialogFragment . Además, el equivalente CarUi de la clase androidx.preference.PreferenceDialogFragments . Los clientes deben usar esta clase para presentar cualquier AlertDialog de plataforma temática.
CarUiSeekBarDialogPreference
Una implementación de la clase androidx.preference.DialogPreference , que proporciona la funcionalidad 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
Un fragmento que proporciona un diseño con SeekBar en un cuadro de diálogo.
CarUiListPreference
CarUi equivalente a la clase androidx.preference.ListPreference .
ListPreferenceFragmentListPreferenceFragment
Un fragmento que proporciona un diseño con androidx.preference.ListPreference en él.
CarUiMultiSelectListPreference
El equivalente CarUi de la clase androidx.preference.Preference .
MultiSelectListPreferenceFragment
Un fragmento que proporciona un diseño con com.android.car.ui.CarUiMultiSelectListPreference en él.