Personnaliser les préférences d'UI de la voiture

Cette page explique comment utiliser et personnaliser les éléments du package com.android.car.ui.preference, qui inclut des éléments d'interface utilisateur pouvant être utilisés pour présenter les préférences des applications.

La plupart des éléments sous-classent des classes com.androidx.preference auxquelles vous ajoutez des personnalisations CarUi. Dans la plupart des cas, vous pouvez utiliser les éléments du package com.android.car.ui.preferences à l'aide de com.android.car.PreferenceFragment. PreferenceFragment remplace tous les éléments androidx.preference par leur équivalent dans car.ui.preferences. Pour voir ces fonctionnalités en action, consultez l'application de référence Paintbooth de la bibliothèque car-ui-lib. Par exemple:

Mise en page des préférences de l'interface utilisateur pour les voitures

Figure 1 : Mise en page des préférences d'UI de la voiture.

Types de préférences disponibles

Cette section décrit les types de préférences d'interface utilisateur pour les voitures.

PreferenceFragment

PreferenceFragment est une sous-classe de androidx.preference.PreferenceFragmentCompat et est la classe de base que les clients doivent utiliser. Lors d'un appel à setPreferenceScreen, cette classe remplace automatiquement les éléments de androidx.preference par l'équivalent disponible des éléments 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

Il s'agit de l'équivalent CarUi de la classe androidx.preference.Preference qui accepte les attributs suivants, qui peuvent être personnalisés à l'aide d'une superposition de ressources d'exécution (RRO). Tous les autres éléments CarUi qui utilisent une variante du style CarUiPreference sont également compatibles avec les attributs suivants.

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

Voici le style de base pour com.android.car.ui.preference, qui étend le thème androidx.Preference. Le drawable chevron est défini dans 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>

ripple est défini dans 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 la mise en page dans le style ci-dessus est superposée, les clients doivent s'assurer que la nouvelle mise en page fournit au moins les ID attendus par les classes androidx correspondantes. Cela s'applique également aux autres éléments qui utilisent ce style de base.

CarUiDropDownPreference

Il s'agit de l'équivalent CarUi de la classe androidx.preference.DropDownPreference et utilise le style suivant:

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

CarUiRadioButtonPreference

Cette sous-classe de androidx.preference.TwoStatePreference gonfle la mise en page car_ui_radio_button_preference_widget lors de l'initialisation. Si cette mise en page est superposée dans un RRO, la nouvelle mise en page doit contenir un élément de type android.widget.RadioButton, avec l'ID R.id.radio_button, et doit également contenir d'autres éléments et ID requis par la classe de base.

CarUiSwitchPreference

Il s'agit de l'équivalent CarUi de la classe androidx.preference.SwitchPreference. La différence est que lorsqu'il n'est pas activé, un message de type "toast" s'affiche. Vous pouvez personnaliser le message de toast en appelant la méthode setMessageToShowWhenDisabledPreferenceClicked dans Android 10 et Android 11. Cet élément utilise le style suivant:

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

CarUiTwoActionPreference

Sous-classe de CarUiPreference qui active une action secondaire. Les attributs qui peuvent être utilisés pour personnaliser cet élément sont fournis ci-dessous:

<declare-styleable name="CarUiTwoActionPreference">
        <!-- Determines if the secondary action is initially shown -->
        <attr name="actionShown" format="boolean"/>
</declare-styleable>

Cet élément utilise le même style que la classe de base et nécessite R.id.action_widget_container et android.R.id.widget_frame.

CarUiDialogFragment

Cette classe est empruntée en l'état à androidx.preference.PreferenceDialogFragmentCompat, avec quelques ajouts spécifiques à CarUi. Les clients doivent utiliser des sous-classes de cette classe pour présenter la plate-forme thématique AlertDialog.

PreferenceDialogFragment

Une sous-classe directe de CarUiDialogFragment . Les clients doivent sous-classer cette classe pour présenter toute plate-forme à thème AlertDialog.

CarUiEditTextPreference

Il s'agit de l'équivalent CarUi de la classe androidx.preference.EditTextPreference:

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

Si la mise en page dans le style ci-dessus est superposée, les clients doivent s'assurer que la nouvelle mise en page fournit les ID attendus par la classe androidx.preference.EditTextPreference.

EditTextPreferenceDialogFragment

Sous-classe directe de PreferenceDialogFragment. Également, l'équivalent CarUi de la classe androidx.preference.PreferenceDialogFragments. Les clients doivent utiliser cette classe pour présenter toute plate-forme thématique AlertDialog.

CarUiSeekBarDialogPreference

Implémentation de la classe androidx.preference.DialogPreference, qui fournit la fonctionnalité 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

Fragment qui fournit une mise en page avec une barre de défilement dans une boîte de dialogue.

CarUiListPreference

Équivalent CarUi de la classe androidx.preference.ListPreference.

ListPreferenceFragment

Fragment qui fournit une mise en page avec androidx.preference.ListPreference.

CarUiMultiSelectListPreference

Équivalent CarUi de la classe androidx.preference.Preference.

MultiSelectListPreferenceFragment

Fragment qui fournit une mise en page avec com.android.car.ui.CarUiMultiSelectListPreference.