Tổng quan

Chế độ cài đặt cho ô tô (packages/apps/Car/Settings) được cung cấp riêng cho Android Automotive OS (AAOS). Cài đặt trên ô tô khác với Cài đặt điện thoại (packages/apps/Settings). Mặc dù phần Cài đặt ô tô chứa một số chế độ cài đặt quen thuộc của điện thoại, Phần Cài đặt trên ô tô cung cấp giao diện người dùng trực quan phù hợp với ô tô, tối ưu hoá khả năng mất tập trung của người lái xe và nhiều điểm tuỳ chỉnh cho nhà sản xuất thiết bị gốc.

Ngoài tổng quan về Cài đặt ô tô được cung cấp bên dưới, hãy xem các chủ đề để tìm hiểu thêm về Cài đặt ô tô:

Cấu trúc và nguyên tắc

Hầu hết các trang trong phần Cài đặt ô tô đều được triển khai dưới dạng một loạt các mảnh mở rộng SettingsFragment, mỗi cấu hình có một hoạt động riêng được xác định trong CarCài đặt hoạt động. Những hoạt động tĩnh này được mở rộng từ BaseCarSettingsActivity. Mặc dù có một vài ngoại lệ đối với quy tắc này, chẳng hạn như một số mảnh đặc biệt mở rộng BaseFragment thay vì SettingsFragment và một số Activity nằm bên ngoài CarsettingActivities, tất cả đều được coi là ngoại lệ (không phải là các mẫu cần tuân theo).

Lựa chọn ưu tiên tĩnh

Tuỳ chọn tĩnh được xác định trong XML bằng cách sử dụng Preference (Lựa chọn ưu tiên) hoặc CarUiPreference . Quá trình triển khai SettingsFragment sử dụng getPreferenceScreenResId() để xác định tệp XML nào chứa danh sách lựa chọn ưu tiên tĩnh cần hiển thị.

Lựa chọn ưu tiên linh động

Lựa chọn ưu tiên linh động sử dụng PreferenceGroup hoặc triển khai PreferenceGroup.

Trong ứng dụng CarSettings, các lựa chọn ưu tiên động đại diện cho một tập hợp thông thường các tuỳ chọn đưa người dùng đến các trang bổ sung trong CarSettings, nhưng đã được thêm qua lớp Preference Bộ điều khiển thay vì trong XML. Ví dụ: Quản lý bàn phím tùy chọn trong mục Ngôn ngữ & Tùy chọn phương thức nhập tự động thêm thông tin đầu vào cho trang tùy chọn dựa trên việc liệu các phương thức nhập này có được phép hoặc không được phép.

Thanh hành động

Đầu mỗi màn hình cài đặt đều có một thanh tác vụ, trong đó có thể chứa "quay lại" thao tác, tiêu đề màn hình và các tiện ích bổ sung giúp thao tác (ví dụ: các nút và công tắc). Các thanh hành động này tương tự như ActionBar do Android cung cấp, nhưng thực ra là các khung hiển thị tuỳ chỉnh. Trên Android 11 trở lên, thanh công cụ có trong bố cục cơ sở của khung, có chứa các chế độ xem cho thanh công cụ và framelayout cho phần nội dung còn lại của ứng dụng.

Các tiện ích thao tác bổ sung là các lớp MenuItem và sẽ được tạo trong onCreate của SettingsFragment hoặc tương ứng BaseFragment. Các thuộc tính như chế độ hiển thị, trạng thái, v.v. sẽ được phương thức setter kiểm soát trong logic nghiệp vụ của 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);
    }
}

Thanh hành động hỗ trợ cho Tối ưu hoá để chống phân tâm trong phần Cài đặt ô tô. Đặt Quy tắc hạn chế về trải nghiệm người dùng trong MenuItem.Builder khi tạo.

Bộ điều khiển lựa chọn ưu tiên

Mỗi trang cài đặt có thể chứa một số Lựa chọn ưu tiên.

Hãy xem hình ảnh sau đây để biết mối liên hệ giữa các thành phần này:

Các thành phần trong CarSettings

Hình 1. Các thành phần trong CarSettings

PreferenceController là một thành phần nhận biết được vòng đời giúp đóng gói logic nghiệp vụ liên quan đến các Lựa chọn ưu tiên cụ thể. Bạn chỉ có thể đính kèm PreferenceControllers vào Lựa chọn ưu tiên liên quan thông qua 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>

Chế độ cài đặt cho ô tô ngăn chặn việc tạo PreferenceController một cách rõ ràng thông qua mã để sửa đổi hệ thống phân cấp Cài đặt dễ dàng hơn mà các thay đổi đối với mã Java.

Có thể PreferenceController cần một số dữ liệu động để hoạt động chính xác. Ví dụ: PreferenceController tắt thông báo cho ứng dụng cần biết ứng dụng nào cần hành động. Vì PreferenceControllers luôn được định nghĩa trong XML, nên không có để cung cấp thêm đối số hàm khởi tạo. Thay vào đó, các giá trị bổ sung này được cung cấp thông qua phương thức setter công khai trên PreferenceController và đặt bằng phương thức use(...) qua 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);
  }
}

Phương thức use(...) được dùng càng thường xuyên thì càng khó giữ lại mục tiêu ban đầu là có thể sắp xếp lại hệ thống phân cấp chế độ cài đặt với những thay đổi tối thiểu đối với mã Java, vì nhiều phần lớn của mã mảnh hiện có cần được sao chép vào mảnh mới tạo. Một cách để giảm thiểu khó khăn khi thực hiện việc này là:

  • Giảm thiểu mức sử dụng use(...).
  • Cố gắng lưu giữ mọi lệnh gọi đến use(...) ở cùng một nơi trong mảnh (ví dụ: trong phương thức onAttach()).

Xử lý ý định

Tất cả ý định cần được xử lý bởi ứng dụng Cài đặt cho ô tô được xác định trong tệp kê khai . Ý định thường được xác định và xử lý như hầu hết các ứng dụng Android tiêu chuẩn, bằng mọi hoạt động và bộ lọc ý định đã xác định trong tệp kê khai.

Thay đổi mảnh gốc

Nếu muốn, biểu tượng Thoát có thể được hiển thị hoặc ẩn bằng config_show_settings_root_exit_icon.

Tuỳ chỉnh giao diện

Tuỳ chỉnh các thuộc tính và tài nguyên khác

Ứng dụng Cài đặt cho ô tô chủ yếu sử dụng CarSettingTheme là phần mở rộng của Theme.CarUi. Giao diện này dùng để chuẩn hoá giao diện của các ứng dụng hệ thống nhằm đảm bảo tính nhất quán trong hệ thống.

Tuỳ chỉnh lựa chọn ưu tiên

Tuỳ chọn tuỳ chỉnh bao gồm các vị trí bổ sung sau:

  • Bố cục của một số lớp lựa chọn ưu tiên cơ sở được xác định trong car_preferencelớp phủ cho các mẫu ô tô. Mọi bố cục tuỳ chỉnh cho các lớp ưu tiên cơ sở đều có thể được thay thế tại đây.
  • Ứng dụng Cài đặt dành cho ô tô sử dụng một số lựa chọn ưu tiên tuỳ chỉnh được xác định chủ yếu trong phần common . Các thông tin này nên được phủ lên trong mô-đun Cài đặt ô tô tách biệt với các lớp ưu tiên cơ sở.