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:
- Dodawanie ustawień samochodu
- Zmienianie ustawień samochodu
- Optymalizacja rozpraszania uwagi w ustawieniach samochodu
- Indeksowanie ustawień samochodu
- Dostosowywanie 2 paneli
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:
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 metodzieonAttach()
).
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.