Tổng quan

Cài đặt ô tô ( packages/apps/Car/Settings ) được cung cấp riêng cho Hệ điều hành ô tô Android (AAOS). Cài đặt ô tô khác với Cài đặt điện thoại ( packages/apps/Settings ). Mặc dù Cài đặt ô tô chứa một số cài đặt điện thoại quen thuộc, Cài đặt ô tô cung cấp giao diện người dùng trực quan dành cho ô tô , tối ưu hóa sự phân tâm của người lái xe và nhiều điểm nhập tùy chỉnh cho OEM.

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

Kiến trúc và hướng dẫn

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

Tùy chọn tĩnh

Tùy chọn tĩnh được xác định trong XML bằng cách sử dụng thẻ Tùy chọn hoặc CarUiPreference . Việc triển khai SettingsFragment sử dụng phương thức getPreferenceScreenResId() để xác định tệp XML nào chứa danh sách tùy chọn tĩnh cần hiển thị.

Tùy chọn động

Tùy chọn động sử dụng thẻ PreferenceGroup hoặc triển khai PreferenceGroup.

Trong ứng dụng CarSettings, tùy chọn động thể hiện một tập hợp tùy chọn thông thường hướng người dùng đến các trang bổ sung trong CarSettings nhưng đã được thêm thông qua Bộ điều khiển tùy chọn thay vì trong XML. Một ví dụ là tùy chọn Quản lý bàn phím trong tùy chọn Ngôn ngữ & phương thức nhập sẽ tự động thêm các phương thức nhập vào trang tùy chọn dựa trên việc các phương thức nhập này có được phép hay không.

Thanh hành động

Phần trên cùng của mỗi màn hình cài đặt đều có một thanh tác vụ, thanh này có thể chứa điều hướng "quay lại", tiêu đề màn hình và các tiện ích tác vụ bổ sung (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 chất là các chế độ xem tùy chỉnh. Trong Android 11 trở lên, thanh công cụ này được bao gồm trong bố cục đế khung, chứa các chế độ xem cho thanh công cụ và bố cục khung cho phần còn lại của nội dung ứng dụng.

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

Các thanh hành động có hỗ trợ Tối ưu hóa sự phân tâm trong Cài đặt ô tô . Đặt UXRestrictions trong MenuItem.Builder khi tạo.

Bộ điều khiển tùy chọn

Mỗi trang cài đặt có thể chứa một số Tùy chọn khác nhau.

Xem hình ảnh sau đây để biết các thành phần này có liên quan như thế nào:

Thành phần cài đặt ô tô

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

PreferenceController là thành phần nhận biết vòng đời giúp gói gọn logic nghiệp vụ liên quan đến Tùy chọn cụ thể. PreferenceControllers chỉ có thể được đính kèm với Preference có 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>

Cài đặt ô tô ngăn chặn rõ ràng việc tạo PreferenceController thông qua mã để giúp sửa đổi cấu trúc phân cấp Cài đặt dễ dàng hơn với những thay đổi tối thiểu đố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 một ứng dụng cần biết ứng dụng nào sẽ hoạt động. Bởi vì PreferenceControllers luôn được xác định trong XML nên không có cách nào để cung cấp các đối số hàm tạo bổ sung. Thay vào đó, những giá trị bổ sung này được cung cấp thông qua các setter công khai trên PreferenceController và được thiết lập bằng phương thức use(...) từ 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 sử dụng càng thường xuyên thì càng khó giữ được mục tiêu ban đầu là có thể sắp xếp lại hệ thống phân cấp cài đặt với những thay đổi tối thiểu đối với mã Java, bởi vì các phần lớn của mã đoạn hiện có cần phải được được sao chép vào đoạn mới được 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 việc sử dụng use(...) .
  • Cố gắng giữ mọi lệnh gọi use(...) ở một nơi trong đoạn (ví dụ: trong phương thức onAttach() ).

Xử lý ý định

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

Thay đổi đoạn gốc

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

Tùy chỉnh chủ đề

Tùy chỉnh các thuộc tính và tài nguyên khác

Ứng dụng Cài đặt ô tô chủ yếu sử dụng CarSettingTheme , một phần mở rộng của Theme.CarUi . Chủ đề này được sử dụng để chuẩn hóa 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.

Tùy chỉnh tùy chọn

Việc tùy chỉnh tùy chọn trải rộng trên các vị trí bổ sung sau:

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