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.