Les paramètres de la voiture (packages/apps/Car/Settings
) sont fournis spécifiquement pour Android Automotive OS (AAOS). Les paramètres de la voiture diffèrent des paramètres du téléphone (packages/apps/Settings
). Bien que les paramètres de la voiture contiennent des paramètres de téléphone familiers, ils fournissent une interface utilisateur visuelle adaptée à la voiture, des optimisations pour éviter les distractions du conducteur et de nombreux points d'entrée de personnalisation pour les OEM.
En plus de la présentation des paramètres de la voiture ci-dessous, consultez les sujets associés suivants pour en savoir plus sur les paramètres de la voiture:
- Ajouter des paramètres de voiture
- Réorganiser les paramètres de la voiture
- Optimisation contre la distraction dans les paramètres de la voiture
- Indexation de la recherche dans les paramètres de la voiture
- Personnalisation de la vue à deux volets
Architecture et consignes
La plupart des pages des paramètres de la voiture 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. Il existe quelques exceptions à cette règle, comme certains fragments spéciaux qui étendent BaseFragment plutôt que 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 la balise Preference ou CarUiPreference. Une implémentation SettingsFragment
utilise la méthode getPreferenceScreenResId()
pour définir le fichier XML contenant 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 redirigent l'utilisateur vers des pages supplémentaires dans CarSettings, mais qui ont été ajoutées via le contrôleur de préférences au lieu de l'élément XML. Par exemple, la préférence "Gérer les claviers" sous "Langues et saisie" ajoute dynamiquement des modes de saisie à la page de préférences en fonction de leur autorisation ou non.
Barres d'action
En haut de chaque écran de paramètres se trouve une barre d'action, qui peut contenir une navigation "Retour", un titre d'écran et des widgets d'action supplémentaires (boutons et boutons d'activation/de désactivation, par exemple). Ces barres d'action sont similaires à la barre d'action fournie par Android, mais il s'agit en réalité de vues personnalisées. Sous Android 11 et versions ultérieures, cette barre d'outils est incluse dans la mise en page de base du châssis, qui contient les vues de la barre d'outils et une mise en page de framelayout 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 de l'BaseFragment
respectif. Les propriétés telles que la visibilité, l'état, etc. doivent être contrôlées par des sétteurs 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 avec 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.
L'image suivante montre comment ces composants sont liés:
Figure 1. Composants CarSettings
PreferenceController
est un composant compatible avec le cycle de vie qui permet d'encapsuler la logique métier concernant des préférences spécifiques.
PreferenceControllers
ne peut être associé à 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>
Les paramètres de la voiture empêchent explicitement la création de PreferenceController
via le code afin de faciliter la modification de la hiérarchie des paramètres avec des modifications minimales 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 quelle application doit être traitée.
Étant donné que les PreferenceControllers
sont toujours définis en XML, il n'est pas possible de fournir d'arguments de constructeur supplémentaires. Au lieu de cela, ces valeurs supplémentaires sont fournies via des setteurs publics sur PreferenceController
et définies à l'aide de la méthode 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, plus il devient difficile de conserver l'objectif initial, à savoir pouvoir réorganiser la hiérarchie des paramètres avec un minimum de modifications apportées au code Java, car de grandes sections du code de fragment existant doivent être copiées dans le fragment nouvellement créé. Pour faciliter cette tâche, vous pouvez procéder comme suit:
- Limitez votre utilisation de
use(...)
. - Essayez de regrouper tous les appels à
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'application 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 les filtres d'intent définis dans le fichier manifeste.
Modifier le fragment racine
Si vous le souhaitez, vous pouvez afficher ou masquer l'icône de sortie à 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 CarSettingTheme
, qui est une extension de Theme.CarUi
. Ce thème permet de normaliser l'apparence des applications système afin de garantir la cohérence du système.
Personnaliser les préférences
Les préférences de personnalisation s'appliquent aux emplacements supplémentaires suivants:
- La mise en page de certaines classes de préférences de base est définie dans
car_preference
et superposée pour les builds de voitures. Vous pouvez remplacer ici toutes les mises en page de personnalisation des classes de préférences de base. - Les paramètres de la voiture utilisent certaines préférences personnalisées définies principalement dans le package
common
. Ils doivent être superposés dans le module "Paramètres de la voiture", séparément des classes de préférences de base.