Impostazioni auto (packages/apps/Car/Settings
) è fornita appositamente per:
Android Automotive OS (AAOS). Le impostazioni dell'auto sono diverse dalle impostazioni del telefono
(packages/apps/Settings
) Anche se Impostazioni auto contiene
alcune impostazioni familiari dello smartphone,
Impostazioni auto offre un'interfaccia utente visiva elaborata dall'auto, ottimizzazioni della distrazione del conducente
e numerosi punti di ingresso della personalizzazione per gli OEM.
Oltre alla panoramica delle impostazioni dell'auto fornita di seguito, consulta le relative sezioni argomenti per scoprire di più sulle Impostazioni dell'auto:
- Aggiunta delle impostazioni dell'auto
- Riorganizzazione delle impostazioni dell'auto
- Ottimizzazione della distrazione nelle impostazioni dell'auto
- Indicizzazione delle ricerche nelle impostazioni dell'auto
- Personalizzazione a doppio riquadro
Architettura e linee guida
La maggior parte delle pagine in Impostazioni auto è implementata come una serie di frammenti
che estendono SettingsFragment, ciascuno con la propria attività definita in
CarSettingActivities. Queste attività statiche vengono estese da BaseCarSettingsActivity. Sebbene esistano poche eccezioni a questa regola, come alcuni frammenti speciali che si estendono
BaseFragment anziché SettingsFragment
e alcune attività che risiedono al di fuori di CarSettingActivities, tutte da considerare come eccezioni (non come modelli da seguire).
Preferenze statiche
Una preferenza statica viene definita in XML utilizzando il campo Preference (Preferenza)
o CarUiPreference
del tag. Un'implementazione SettingsFragment
utilizza getPreferenceScreenResId()
per definire quale file XML contiene l'elenco statico di preferenze da visualizzare.
Preferenze dinamiche
Le preferenze dinamiche utilizzano PreferenceGroup o un'implementazione di PreferenceGroup.
Nell'app CarSettings, le preferenze dinamiche rappresentano un normale insieme preferenze che indirizzano l'utente ad altre pagine di CarSettings, ma che sono state aggiunte tramite le Preferenze del controller anziché nel file XML. Un esempio è la funzionalità Gestisci tastiere nella sezione Lingue e Preferenza di input che aggiunge dinamicamente l'input metodi alla pagina delle preferenze a seconda che questi metodi di inserimento siano consentito o meno.
Barre delle azioni
Nella parte superiore di ogni schermata delle impostazioni è presente una barra delle azioni che può contenere un "Indietro" navigazione, un titolo della schermata e widget di azioni supplementari (ad esempio, pulsanti e interruttori). Queste barre delle azioni sono simili a ActionBar fornite da Android, ma di fatto sono visualizzazioni personalizzate. In Android 11 e versioni successive, barra degli strumenti è inclusa nel layout di base dello chassis, che contiene le viste dei la barra degli strumenti e un framelayout per gli altri contenuti dell'app.
I widget di azioni supplementari sono classi MenuItem e devono essere creati in
il onCreate
del rispettivo SettingsFragment
o
BaseFragment
. Proprietà come visibilità, stato e così via devono
essere controllati dai setter nella logica di business di 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); } }
Le barre delle azioni supportano
Ottimizzazione della distrazione nelle impostazioni dell'auto.
Imposta le restrizioni dell'esperienza utente in MenuItem.Builder
al momento della creazione.
Controllori delle preferenze
Ogni pagina delle impostazioni può contenere diverse Preferenze.
Guarda l'immagine seguente per conoscere la correlazione tra questi componenti:
Figura 1. Componenti di Impostazioniauto
PreferenceController
è un componente sensibile al ciclo di vita che aiuta a
incapsulano la logica di business relativa a Preferenze specifiche.
PreferenceControllers
può essere associato alla preferenza pertinente solo tramite
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>
Le impostazioni dell'auto impediscono esplicitamente la creazione di PreferenceController
tramite codice in modo da semplificare la modifica della gerarchia delle impostazioni con
modifiche al codice Java.
È possibile che un PreferenceController
abbia bisogno di alcuni dati dinamici
per un corretto funzionamento. Ad esempio, un PreferenceController
che si spegne
le notifiche di un'app devono sapere su quale app agire.
Poiché i valori PreferenceControllers
sono sempre definiti in XML, non è possibile
per fornire ulteriori argomenti del costruttore. Questi valori aggiuntivi vengono invece
forniti tramite setter pubblici in PreferenceController
e impostati utilizzando
use(...)
di 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); } }
Più spesso viene utilizzato il metodo use(...)
, più diventa difficile mantenere
l'obiettivo originale di poter riorganizzare la gerarchia delle impostazioni con modifiche minime alle
il codice Java, perché grandi sezioni del codice dei frammenti esistente devono essere copiate
il frammento appena creato. Un modo per ridurre al minimo la difficoltà di farlo è:
- Riduci al minimo l'utilizzo di
use(...)
. - Prova a conservare tutte le chiamate a
use(...)
in un unico posto nel frammento (ad esempio, nel metodoonAttach()
).
Gestione degli intent
Tutti gli intent che devono essere gestiti dall'app Impostazioni auto sono definiti nel manifest . In genere gli intent vengono definiti e gestiti come la maggior parte delle app per Android standard. con tutte le attività e i filtri per intent definiti nel manifest.
Modifica il frammento radice
Se lo desideri, l'icona Esci può essere visualizzata o nascosta utilizzando config_show_settings_root_exit_icon
.
Personalizza il tema
Personalizzare altri attributi e risorse
L'app Impostazioni auto utilizza principalmente CarSettingTheme
,
che è un'estensione di Theme.CarUi
. Questo tema viene utilizzato per standardizzare
l'aspetto e il design delle app di sistema per garantire coerenza nel sistema.
Personalizza preferenze
La personalizzazione delle preferenze include queste località aggiuntive:
- Il layout di alcune classi di preferenze di base è definito in
car_preference
e sovrapposto per le build di automobili. Qualsiasi layout di personalizzazione per le classi di preferenza di base può sostituito qui. - Impostazioni auto utilizza alcune preferenze personalizzate definite principalmente nelle
common
pacchetto. Questi elementi devono essere sovrapposti all'interno del modulo Impostazioni auto separatamente le classi di preferenza di base.