Cómo personalizar las preferencias de la IU del vehículo

En esta página, se describe cómo usar y personalizar los elementos del Paquete com.android.car.ui.preference, que incluye elementos de la IU que se puede usar para presentar las preferencias de las apps.

La mayoría de los elementos crean subclases de las clases com.androidx.preference que agregas Personalizaciones de CarUi. En la mayoría de los casos, puedes usar los elementos de la com.android.car.ui.preferences con com.android.car.PreferenceFragment PreferenceFragment reemplaza todo Elementos androidx.preference con sus equivalentes en car.ui.preferences Para ver estas funcionalidades en acción, consulta car-ui-lib App de referencia de Paintbooth Por ejemplo:

Diseño de preferencias de la IU del vehículo

Figura 1: Diseño de preferencias de la IU del vehículo.

Tipos de preferencias disponibles

En esta sección, se describen los tipos de preferencias de la IU del vehículo.

PreferenceFragment

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 a partir de 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>

Preferencias de CarUi

Este es el equivalente de CarUi de la clase androidx.preference.Preference que admite los siguientes atributos, que se pueden personalizar usando una superposición de recursos en tiempo de ejecución (RRO). Todos los demás elementos de 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 diseño base de com.android.car.ui.preference, que extiende 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>

El 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 del estilo anterior se superpone, los clientes deben asegurarse el nuevo diseño proporciona, al menos, los IDs que se esperan para los androidx de clases. Esto también se aplica a los otros elementos que usan este estilo base.

Preferencias de CarUiDropDownPreference

Este es el equivalente de CarUi de androidx.preference.DropDownPreference y usa el siguiente estilo:

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

PreferenciadebotóndeRadioCarUi

Esta subclase de androidx.preference.TwoStatePreference aumenta el diseño de car_ui_radio_button_preference_widget durante de inicio. Si este diseño se superpone en una RRO, el diseño nuevo debe contener un elemento de tipo android.widget.RadioButton, con ID R.id.radio_button y también debe contener otros ID y elementos que requiere la clase base.

CarUiSwitchPreference

Este es el equivalente de CarUi de la clase androidx.preference.SwitchPreference. La diferencia es que cuando este elemento no está habilitado, se muestra un mensaje de aviso. El brindis mensaje 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>

Preferencias de dos acciones

Es una subclase de CarUiPreference que habilita una acción secundaria. El de atributos que se pueden usar para personalizar este elemento, 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.

Fragmento de diálogo CarUi

Esta clase se presta tal cual androidx.preference.PreferenceDialogFragmentCompat con algunas incorporaciones específicas de CarUi. Los clientes deberían usar subclases de esta clase para presentar plataforma temática: AlertDialog.

PreferenceDialogFragment

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

CarUiEditTextPreference

Este es el equivalente de CarUi de androidx.preference.EditTextPreference clase:

<style name="Preference.CarUi.DialogPreference.EditTextPreference">
        <item name="android:dialogLayout">@layout/car_ui_preference_dialog_edittext</item>
</style>

Si el diseño del estilo anterior se superpone, los clientes deben asegurarse de que el nuevo diseño. Proporciona los IDs que espera la clase androidx.preference.EditTextPreference.

EditTextPreferenceDialogFragment

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

Preferencias de diálogo de barra de búsqueda de CarUiSeek

Una implementación de la clase androidx.preference.DialogPreference, que proporciona Barra de búsqueda funcionalidad:

<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

Fragmento que proporciona un diseño con una barra de búsqueda en un diálogo.

Preferencias de lista de CarUi

Equivalente CarUi de clase androidx.preference.ListPreference.

ListPreferenceFragment

Fragmento que proporciona un diseño con androidx.preference.ListPreference.

CarUiMultiSelectListPreference

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

MultiSelectListPreferenceFragment

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