Przegląd

Ustawienia samochodu (packages/apps/Car/Settings) są dostępne specjalnie dla system operacyjny Android Automotive (AAOS). Ustawienia samochodu różnią się od ustawień telefonu (packages/apps/Settings). Chociaż Ustawienia samochodu zawierają znane Ci ustawienia telefonu, Aplikacja Car Settings zapewnia interfejs mobilny oraz optymalizacje rozpraszające uwagę kierowcy, oraz wiele punktów wejścia dostosowania do potrzeb OEM.

Oprócz omówienia opisanych poniżej ustawień samochodu możesz też zapoznać się z tymi powiązanymi Więcej informacji o ustawieniach samochodu:

Architektura i wytyczne

Większość stron w Ustawieniach samochodu jest zaimplementowana w postaci serii fragmentów. obejmujące fragment SettingsFragment, a każde z nich ma własną aktywność zdefiniowaną w CarSettingActivities. Zawartość tych statycznych aktywności została poszerzona o element BaseCarSettingsActivity. Chociaż od tej reguły istnieje kilka wyjątków, takich jak specjalne fragmenty rozszerzające BaseFragment, a nie SettingsFragment, i niektóre aktywności spoza CarSettingActivities, które należy traktować jako wyjątki (a nie jako wzorce, którymi należy się kierować).

Ustawienia statyczne

Preferencję statyczną definiuje się w pliku XML za pomocą atrybutu Preference lub CarUiPreference . Implementacja SettingsFragment korzysta z metody getPreferenceScreenResId() określający, który plik XML zawiera statyczną listę ustawień do wyświetlenia.

Preferencje dynamiczne

Preferencje dynamiczne używają parametru PreferenceGroup. lub tagiem PreferenceGroup.

W aplikacji CarSettings preferencje dynamiczne reprezentują normalny zbiór które kierują użytkownika na dodatkowe strony w CarSettings, ale które zostały dodane za pomocą Preferencji kontrolera, a nie w kodzie XML. Przykładem może być Zarządzanie klawiaturami. w sekcji Języki i Preferencja wejściowa, która dynamicznie dodaje dane wejściowe na stronie preferencji na podstawie tego, czy są one dozwolone lub niedozwolone.

Paski działań

U góry każdego ekranu ustawień znajduje się pasek działań, który może zawierać „Wstecz” nawigacji, tytułu ekranu i dodatkowych widżetów działań (np. (przyciski i przełączniki). Te paski działań są podobne do pasków działań. udostępniane przez Androida, ale w rzeczywistości są to widoki niestandardowe. W Androidzie 11 i nowszych pasek narzędzi jest dołączony do układu podstawy podwozia, który zawiera widoki dla a także pasek narzędzi z elementem iframe.

Dodatkowe widżety działań to klasy MenuItem i powinny być tworzone w onCreate odpowiednich SettingsFragment lub BaseFragment Właściwości takie jak widoczność, stan itp. powinny być kontrolowane przez osoby ustalające w logice biznesowej 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);
    }
}

Paski akcji obsługują następujące funkcje: Optymalizacja rozpraszania uwagi w ustawieniach samochodu Ustaw UXRestrictions w MenuItem.Builder podczas tworzenia.

Kontrolery preferencji

Każda strona ustawień może zawierać Ustawienia.

Na tej ilustracji pokazujemy, jak są ze sobą powiązane te komponenty:

Komponenty CarSettings

Rysunek 1. Komponenty CarSettings

PreferenceController to komponent uwzględniający cykl życia, który pomaga: zawierać logikę biznesową związaną z określonymi Preferencjami. Usługę PreferenceControllers można dołączyć do odpowiednich preferencji tylko za pomocą Plik 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>

Ustawienia samochodu wyraźnie uniemożliwiają utworzenie urządzenia PreferenceController za pomocą kodu, by można było łatwo modyfikować hierarchię ustawień przy minimalnym w kodzie Java.

Możliwe, że PreferenceController potrzebuje danych dynamicznych nie powinny działać prawidłowo. na przykład urządzenie PreferenceController, które się wyłącza. powiadomienia z danej aplikacji muszą wiedzieć, wobec której aplikacji mają działać. Elementy PreferenceControllers są zawsze zdefiniowane w pliku XML, więc nie można jako sposób podania dodatkowych argumentów konstruktora. Zamiast tego te dodatkowe wartości są są udostępniane przez publiczne dekodery na PreferenceController i ustawione za pomocą Metoda use(...) z 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);
  }
}

Im częściej używana jest metoda use(...), tym trudniej jest jej utrzymać pierwotnym celem była możliwość zmiany hierarchii ustawień przy minimalnych zmianach kodu Java, ponieważ duże fragmenty kodu wymagają skopiowania do nowo utworzony fragment. Jednym ze sposobów na zminimalizowanie trudności tego procesu jest:

  • Zminimalizuj korzystanie z use(...).
  • Staraj się przechowywać wszystkie wywołania funkcji use(...) w jednym miejscu we fragmencie (na przykład w metodzie onAttach()).
.

Obsługa intencji

Wszystkie zamiary które powinny być obsługiwane przez aplikację Ustawienia samochodu, wyświetlaj . Intencje są zazwyczaj definiowane i obsługiwane tak jak większość standardowych aplikacji na Androida, ze wszystkimi działaniami i filtrami intencji zdefiniowanymi w pliku manifestu.

Zmień fragment główny

W razie potrzeby ikonę wyjścia można wyświetlić lub ukryć za pomocą funkcji config_show_settings_root_exit_icon.

Dostosowywanie motywu

Dostosuj inne atrybuty i zasoby

Aplikacja Ustawienia samochodu używa głównie tych funkcji: CarSettingTheme, co jest rozszerzeniem Theme.CarUi. Ten motyw służy do standaryzacji wygląd i sposób działania aplikacji systemowych w celu zapewnienia spójności systemu.

Dostosuj ustawienia

Dostosowywanie ustawień obejmuje te dodatkowe lokalizacje:

  • Układ niektórych klas podstawowych jest zdefiniowany w car_preference i nałożone dla konstrukcji samochodów. Wszelkie układy dostosowywania klas podstawowych ustawień mogą być wymienione tutaj.
  • Ustawienia samochodu korzystają z ustawień niestandardowych zdefiniowanych głównie common pakietu SDK. Należy je nałożyć w module Ustawienia samochodu oddzielnie od do podstawowych klas preferencji.