Personalizar las preferencias de la interfaz de usuario del automóvil

Esta página 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 de aplicaciones.

La mayoría de los elementos son subclases de clases 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

Esta sección describe los tipos de preferencias de Car UI.

Fragmento de preferencia

PreferenceFragment es una subclase de androidx.preference.PreferenceFragmentCompat y es la clase base que los clientes deben usar. 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>

Preferencia CarUi

Este es el equivalente CarUi 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 utilizan 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 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 esperados por las clases androidx correspondientes. Esto también se aplica a los demás elementos que utilizan este estilo base.

Preferencia CarUiDropDown

Este es el equivalente CarUi de la clase androidx.preference.DropDownPreference y utiliza el siguiente estilo:

<style name="Preference.CarUi.DropDown">
        <item name="android:layout">@layout/car_ui_preference_dropdown</item>
</style>

CarUiRadioButtonPreferencia

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 un 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.

CarUiSwitchPreferencia

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>

CarUiTwoActionPreferencia

Una subclase de CarUiPreference que permite una acción secundaria. A continuación se proporcionan los atributos que se pueden utilizar para personalizar este elemento:

<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 .

CarUiDialogFragmento

Esta clase se toma prestada tal cual de androidx.preference.PreferenceDialogFragmentCompat con algunas adiciones específicas de CarUi. Los clientes deben utilizar subclases de esta clase para presentar la plataforma temática AlertDialog .

PreferenciaDialogFragment

Una subclase directa de CarUiDialogFragment . Los clientes deben subclasificar esta clase para presentar cualquier plataforma temática AlertDialog .

CarUiEditTextPreferencia

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 identificadores esperados por la clase androidx.preference.EditTextPreference .

EditarTextPreferenceDialogFragment

Una subclase directa de PreferenceDialogFragment . Además, el equivalente CarUi de la clase androidx.preference.PreferenceDialogFragments . Los clientes deben utilizar esta clase para presentar cualquier plataforma temática AlertDialog .

CarUiSeekBarDialogPreferencia

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 una barra de búsqueda en un cuadro de diálogo.

Preferencia CarUiList

CarUi equivalente de la clase androidx.preference.ListPreference .

ListaPreferenciaFragmento

Un fragmento que proporciona un diseño con androidx.preference.ListPreference .

Preferencia CarUiMultiSelectList

El equivalente CarUi de la clase androidx.preference.Preference .

Fragmento de preferencia de lista de selección múltiple

Un fragmento que proporciona un diseño con com.android.car.ui.CarUiMultiSelectListPreference .