Les paramètres de la voiture ( packages/apps/Car/Settings
) sont fournis spécifiquement pour le système d'exploitation Android Automotive (AAOS). Les paramètres de la voiture diffèrent des paramètres du téléphone ( packages/apps/Settings
). Alors que Car Settings contient certains paramètres de téléphone familiers, Car Settings fournit une interface utilisateur visuelle adaptée à la voiture , des optimisations de distraction du conducteur et de nombreux points d'entrée de personnalisation pour les constructeurs OEM.
En plus de l'aperçu des paramètres de la voiture fourni ci-dessous, consultez ces rubriques connexes pour en savoir plus sur les paramètres de la voiture :
- Ajout de paramètres de voiture
- Réorganisation des paramètres de la voiture
- Optimisation des distractions dans les paramètres de la voiture
- Indexation de recherche de paramètres de voiture
- Personnalisation à double volet
Architecture et lignes directrices
La plupart des pages de Car Settings 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 à partir de BaseCarSettingsActivity . Bien qu'il existe quelques exceptions à cette règle, comme certains fragments spéciaux étendant BaseFragment plutôt que SettingsFragment
et certaines Activities résidant en dehors de CarSettingActivities , qui doivent tous être considérés 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 la balise Preference ou CarUiPreference . Une implémentation SettingsFragment
utilise la méthode getPreferenceScreenResId()
pour définir quel fichier XML contient la liste statique des préférences à afficher.
Préférences dynamiques
Les préférences dynamiques utilisent la balise PreferenceGroup ou une implémentation de PreferenceGroup.
Dans l'application CarSettings, les préférences dynamiques représentent un ensemble normal de préférences qui dirigent l'utilisateur vers des pages supplémentaires dans CarSettings, mais qui ont été ajoutées via le contrôleur de préférences plutôt que dans le XML. Un exemple est la préférence Gérer les claviers sous la préférence Langues et saisie qui ajoute dynamiquement des méthodes de saisie à la page de préférences selon que ces méthodes de saisie sont autorisées ou non.
Barres d'action
Le haut de chaque écran de paramètres comporte une barre d'action, qui peut contenir une navigation « retour », un titre d'écran et des widgets d'action supplémentaires (par exemple, des boutons et des commutateurs). Ces barres d'action sont similaires à l' ActionBar fournie par Android, mais sont en réalité des vues personnalisées. Sous Android 11 et versions ultérieures, cette barre d'outils est incluse dans la disposition de base du châssis, qui contient les vues de la barre d'outils et une disposition de cadre 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
du SettingsFragment
ou BaseFragment
respectif. Les propriétés telles que la visibilité, l'état, etc. doivent être contrôlées par les 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 prennent en charge l'optimisation des distractions dans les paramètres de la voiture . Définissez les UXRestrictions dans MenuItem.Builder
lors de la création.
Contrôleurs de préférences
Chaque page de paramètres peut contenir un certain nombre de préférences différentes.
Consultez l'image suivante pour connaître la relation entre ces composants :
Figure 1. Composants CarSettings
Le PreferenceController
est un composant prenant en compte le cycle de vie qui permet d'encapsuler la logique métier relative à des préférences spécifiques. PreferenceControllers
ne peuvent être attachés à la préférence appropriée que 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>
Car Settings empêche explicitement la création de PreferenceController
via le code afin de faciliter la modification de la hiérarchie des paramètres avec des modifications minimes du code Java.
Il est possible qu'un PreferenceController
ait besoin de données dynamiques pour fonctionner correctement. Par exemple, un PreferenceController
qui désactive les notifications pour une application doit savoir sur quelle application agir. Étant donné que PreferenceControllers
sont toujours définis en XML, il n'existe aucun moyen de fournir des arguments de constructeur supplémentaires. Au lieu de cela, ces valeurs supplémentaires sont fournies via des setters publics sur le PreferenceController
et définies à l'aide de la méthode use(...)
du 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 souvent, plus il devient difficile de conserver l'objectif initial de pouvoir réorganiser la hiérarchie des paramètres avec des modifications minimes du code Java, car de grandes sections du code fragmenté existant doivent être copié dans le fragment nouvellement créé. Une façon de minimiser la difficulté de cette opération consiste à :
- Minimisez 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 intentions
Toutes les intentions qui doivent être gérées par l'application Car Settings sont définies dans le fichier manifeste . Les intentions sont généralement définies et gérées comme la plupart des applications Android standard, avec toutes les activités et filtres d'intention définis dans le manifeste.
Changer le fragment racine
Si vous le souhaitez, l'icône Quitter 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 Car Settings utilise principalement CarSettingTheme
, qui est une extension de Theme.CarUi
. Ce thème est utilisé pour standardiser l’apparence des applications système afin de garantir la cohérence du système.
Personnaliser les préférences
La personnalisation des préférences couvre ces emplacements supplémentaires :
- La disposition de certaines classes de préférences de base est définie dans
car_preference
et superposée pour les constructions de voitures. Toutes les dispositions de personnalisation pour les classes de préférences de base peuvent être remplacées ici. - Les paramètres de la voiture utilisent certaines préférences personnalisées définies principalement dans le package
common
. Ceux-ci doivent être superposés dans le module Paramètres de la voiture séparément des classes de préférences de base.