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:
- Ajouter les paramètres du véhicule
- Réorganisation des paramètres de la voiture
- Optimisation des distractions dans les paramètres de la voiture
- Indexation de la recherche dans les paramètres de la voiture
- Personnalisation du double volet
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:
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éthodeonAttach()
).
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.
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.