Panoramica

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:

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:

Componenti CarSettings

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 metodo onAttach()).
di Gemini Advanced.

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.