Personalización de las preferencias de la interfaz de usuario del automóvil

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:

Diseño de preferencias de la interfaz de usuario del automóvil

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.