Personnaliser les préférences de l'interface utilisateur de la voiture

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

La plupart des éléments sont des sous-classes 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 en utilisant com.android.car.PreferenceFragment . PreferenceFragment remplace tous les éléments androidx.preference par leurs équivalents dans car.ui.preferences . Pour voir ces fonctionnalités en action, consultez l'application de référence car-ui-lib Paintbooth. Par exemple:

Disposition des préférences de l'interface utilisateur de la voiture

Figure 1. Disposition des préférences de l'interface utilisateur de la voiture.

Types de préférences disponibles

Cette section décrit les types de préférences de l'interface utilisateur de la voiture.

PréférenceFragment

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>

CarUiPréférence

Il s'agit de l'équivalent CarUi de la classe androidx.preference.Preference qui prend en charge 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 prennent également en charge 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>

Ce qui suit est le style de base pour com.android.car.ui.preference , qui étend le thème androidx.Preference . Le chevron dessinable 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>

L' ripple est définie 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 identifiants attendus par les classes androidx correspondantes. Cela s'applique également aux autres éléments qui utilisent ce style de base.

CarUiDropDownPréférence

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>

CarUiRadioButtonPréférence

Cette sous-classe de androidx.preference.TwoStatePreference gonfle la disposition 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'identifiant R.id.radio_button et doit également contenir d'autres éléments et identifiants requis par la classe de base.

CarUiSwitchPréférence

Il s'agit de l'équivalent CarUi de la classe androidx.preference.SwitchPreference . La différence est que lorsque cet élément n'est pas activé, un message toast s'affiche. Le message toast peut être personnalisé 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>

CarUiTwoActionPréférence

Une sous-classe de CarUiPreference qui permet une action secondaire. Les attributs pouvant ê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 telle quelle à androidx.preference.PreferenceDialogFragmentCompat avec quelques ajouts spécifiques à CarUi. Les clients doivent utiliser des sous-classes de cette classe pour présenter la plateforme thématique AlertDialog .

PréférenceDialogFragment

Une sous-classe directe de CarUiDialogFragment . Les clients doivent sous-classer cette classe pour présenter n’importe quelle plateforme thématique AlertDialog .

CarUiEditTextPréférence

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 identifiants attendus par la classe androidx.preference.EditTextPreference .

EditTextPreferenceDialogFragment

Une sous-classe directe de PreferenceDialogFragment . Également l'équivalent CarUi de la classe androidx.preference.PreferenceDialogFragments . Les clients doivent utiliser cette classe pour présenter n'importe quelle plateforme thématique AlertDialog .

CarUiSeekBarDialogPréférence

Une 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

Un fragment qui fournit une mise en page avec une SeekBar dans une boîte de dialogue.

CarUiListPréférence

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

ListePréférenceFragment

Un fragment qui fournit une mise en page contenant androidx.preference.ListPreference .

CarUiMultiSelectListPréférence

L'équivalent CarUi de la classe androidx.preference.Preference .

MultiSelectListPreferenceFragment

Un fragment qui fournit une mise en page contenant com.android.car.ui.CarUiMultiSelectListPreference .