Aperçu

Les paramètres du véhicule (packages/apps/Car/Settings) sont fournis spécifiquement pour Android Automotive OS (AAOS). Les paramètres du véhicule sont différents de ceux du téléphone (packages/apps/Settings). Si les paramètres de la voiture contiennent certains paramètres familiers du téléphone, Les paramètres du véhicule fournissent une interface utilisateur visuelle "carifiée", qui optimise la distraction du conducteur, et de nombreux points d'entrée pour la personnalisation pour les OEM.

Outre la présentation des paramètres du véhicule présentée ci-dessous, consultez les sections pour en savoir plus sur les paramètres du véhicule:

Architecture et consignes

La plupart des pages des paramètres du véhicule sont implémentées sous la forme d'une série de fragments qui étendent SettingsFragment, chacun ayant sa propre activité définie dans CarSettingActivities. Ces activités statiques sont étendues de BaseCarSettingsActivity. Bien qu'il existe quelques exceptions à cette règle, comme certains fragments spéciaux qui étendent BaseFragment au lieu de SettingsFragment et certaines activités situées en dehors de CarSettingActivities, qui doivent toutes être considérées comme des exceptions (et non comme des modèles à suivre).

Préférences statiques

Une préférence statique est définie en XML à l'aide de l'élément Preference ou CarUiPreference . Une implémentation de SettingsFragment utilise l'getPreferenceScreenResId() pour définir le fichier XML contenant la liste statique de préférences à afficher.

Préférences dynamiques

Les préférences dynamiques utilisent l'élément PreferenceGroup ou une implémentation de PreferenceGroup.

Dans l'application CarSettings, les préférences dynamiques représentent un ensemble normal préférences qui redirigent l'utilisateur vers des pages supplémentaires dans CarSettings, mais qui ont été ajoutées via l'onglet Préférences Contrôleur plutôt que dans le fichier XML. Par exemple, l'option "Gérer les claviers" sous "Langues et" Préférence de saisie qui ajoute des entrées de façon dynamique à la page des préférences selon que ces modes de saisie sont autorisé ou non.

Barres d'action

En haut de chaque écran de paramètres se trouve une barre d'action, qui peut contenir un "retour" un titre d'écran et des widgets d'action supplémentaires (par exemple, boutons et commutateurs). Ces barres d'action sont semblables à ActionBar. fournies par Android, mais qui sont en fait des vues personnalisées. Sur Android 11 et versions ultérieures, est incluse dans la disposition en châssis, qui contient les vues et une mise en page des frames pour le reste du contenu de l'application.

Les widgets d'action supplémentaires sont des classes MenuItem et doivent être créés dans le onCreate de l'SettingsFragment ou BaseFragment Les propriétés telles que la visibilité, l'état, etc. doivent être contrôlée par des setters dans la logique métier de SettingsFragment.

// ExampleSettingsFragment.java
public class ExampleSettingsFragment extends SettingsFragment {

    @Override
    protected List<MenuItem> getToolbarMenuItems() {
        return Collections.singletonList(mClearConfirmButton);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mButton = new MenuItem.Builder(getContext())
                .setTitle(R.string.text)
                .setOnClickListener(mOnClickListener)
                .setUxRestrictions(CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP)
                .build();
    }

    private void updateState() {
        button.setVisible(false);
    }
}

Les barres d'action sont compatibles Optimisation des distractions dans les paramètres de la voiture. Définissez les restrictions de l'expérience utilisateur dans MenuItem.Builder lors de la création.

Contrôleurs de préférences

Chaque page de paramètres peut contenir un certain nombre Préférences :

L'image suivante montre les relations entre ces composants:

Composants CarSettings

Figure 1. Composants CarSettings

PreferenceController est un composant tenant compte du cycle de vie qui permet encapsuler la logique métier liée à des Preferences spécifiques. PreferenceControllers ne peut être associé qu'à la préférence concernée via XML.

// example_settings_fragment.xml
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:settings="http://schemas.android.com/apk/res-auto"
    android:title="@string/example_settings_title">
  <Preference
    android:key="@string/pk_example_preference_key"
    android:title="@string/example_preference_title"
    settings:controller="com.android.car.settings.example.ExamplePreferenceController"/>
</PreferenceScreen>

Les paramètres du véhicule empêchent explicitement la création de PreferenceController dans le code pour faciliter la modification de la hiérarchie des paramètres avec un minimum les modifications à apporter au code Java.

Il est possible qu'un PreferenceController ait besoin de données dynamiques pour fonctionner correctement. Par exemple, un PreferenceController qui s'éteint les notifications d'une application doivent savoir sur quelle application agir. Comme les éléments PreferenceControllers sont toujours définis en XML, il n'y a pas moyen de fournir des arguments de constructeur supplémentaires. À la place, ces valeurs supplémentaires sont fournies via des setters publics sur le PreferenceController et définies à l'aide de use(...) à partir de SettingsFragment.

// ExamplePreferenceController.java
public class ExamplePreferenceContorller extends PreferenceController<Preference> {

  private ExampleArg mExampleArg;

  public ExamplePreferenceController(...) {
    ...
  }

  public void setExampleArg(ExampleArg exampleArg) {
    mExampleArg = exampleArg;
  }
}

// ExampleSettingsFragment.java
public class ExampleSettingsFragment extends SettingsFragment {

  @Override
  @XmlRes
  protected int getPreferenceScreenResId() {
    Return R.xml.example_settings_fragment;
  }

  @Override
  public void onAttach(Context context) {
    ExampleArg arg = (ExampleArg) getArguments().getSerializeable(ARG_KEY);
    ExamplePreferenceController controller =
        use(ExamplePreferenceController.class, R.string.pk_example_preference_key);
    controller.setExampleArg(arg);
  }
}

Plus la méthode use(...) est utilisée fréquemment, plus il est difficile de la conserver l'objectif initial de pouvoir réorganiser la hiérarchie des paramètres avec un minimum de modifications le code Java, car de grandes sections du code de fragment existant doivent être copiées le fragment que vous venez de créer. Pour minimiser les difficultés, procédez comme suit:

  • Réduisez au maximum votre utilisation de use(...).
  • Essayez de conserver chaque appel à use(...) au même endroit dans le fragment. (par exemple, dans la méthode onAttach()).

Gestion des intents

Tous les intents qui doivent être gérés par l'appli Paramètres de la voiture sont définis dans le fichier manifeste . Les intents sont généralement définis et gérés comme la plupart des applications Android standards, avec toutes les activités et tous les filtres d'intent définis dans le fichier manifeste.

Modifier le fragment racine

Si vous le souhaitez, l'icône de sortie peut être affichée ou masquée à l'aide de config_show_settings_root_exit_icon.

Personnaliser le thème

Personnaliser d'autres attributs et ressources

L'application Paramètres de la voiture utilise principalement les CarSettingTheme, qui est une extension de Theme.CarUi. Ce thème sert à standardiser l'apparence des applications système pour assurer la cohérence dans le système.

<ph type="x-smartling-placeholder">.

Personnaliser les préférences

La personnalisation des préférences s'étend aussi aux emplacements suivants:

  • La mise en page de certaines classes de préférences de base est définie dans car_preference et superposées pour les constructions de voitures. Toutes les dispositions de personnalisation pour les classes de préférence de base peuvent être remplacé ici.
  • Les paramètres du véhicule utilisent des préférences personnalisées définies principalement dans le common d'un package. Ces éléments doivent être superposés dans le module Paramètres du véhicule séparément les classes de préférence de base.