Car Settings (packages/apps/Car/Settings
) được cung cấp dành riêng cho Android Automotive OS (AAOS). Chế độ cài đặt ô tô khác với Chế độ cài đặt điện thoại (packages/apps/Settings
). Mặc dù Chế độ cài đặt ô tô chứa một số chế độ cài đặt điện thoại quen thuộc, nhưng Chế độ cài đặt ô tô cung cấp giao diện người dùng trực quan dành cho ô tô, các tính năng tối ưu hoá để người lái xe không bị phân tâm và nhiều điểm truy cập tuỳ chỉnh cho nhà sản xuất thiết bị gốc (OEM).
Ngoài thông tin tổng quan về phần Cài đặt ô tô được cung cấp bên dưới, hãy xem các chủ đề liên quan sau đây để tìm hiểu thêm về phần Cài đặt ô tô:
- Thêm chế độ cài đặt ô tô
- Sắp xếp lại phần Cài đặt ô tô
- Tính năng Tối ưu hoá để chống phân tâm trong phần Cài đặt cho ô tô
- Lập chỉ mục tìm kiếm trong phần Cài đặt ô tô
- Tuỳ chỉnh ngăn đôi
Cấu trúc và nguyên tắc
Hầu hết các trang trong phần Cài đặt ô tô được triển khai dưới dạng một loạt các mảnh mở rộng SettingsFragment, mỗi mảnh có một 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 vài trường hợp 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ố 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 để làm theo).
Lựa chọn ưu tiên tĩnh
Lựa chọn ưu tiên tĩnh được xác định trong XML bằng thẻ Preference 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ĩnh các tuỳ chọn hiển thị.
Lựa chọn ưu tiên động
Lựa chọn ưu tiên động sử dụng thẻ PreferenceGroup hoặc cách triển khai PreferenceGroup.
Trong ứng dụng CarSettings, các tuỳ chọn động đại diện cho một nhóm tuỳ chọn thông thường sẽ chuyển hướng người dùng đến các trang bổ sung trong CarSettings, nhưng đã được thêm thông qua Trình điều khiển tuỳ chọn thay vì trong XML. Ví dụ: tuỳ chọn Quản lý bàn phím trong tuỳ chọn Ngôn ngữ và phương thức nhập sẽ tự động thêm các phương thức nhập vào trang tuỳ chọn dựa trên việc các phương thức nhập này có được cho phép hay không.
Thanh thao tác
Ở đầu mỗi màn hình cài đặt có một thanh thao tác, có thể chứa thao tác "quay lại", tiêu đề màn hình và các tiện ích thao tác bổ sung (ví dụ: nút và nút chuyển). Các thanh thao tác này tương tự như ActionBar do Android cung cấp, nhưng thực sự là các thành phần hiển thị tuỳ chỉnh. Trong Android 11 trở lên, thanh công cụ này được đưa vào bố cục cơ sở của khung, chứa các thành phần hiển thị cho thanh công cụ và bố cục khung cho phần nội dung còn lại của ứng dụng.
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ư chế độ hiển thị, trạng thái, v.v. phải được cá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); } }
Các thanh hành động hỗ trợ tính năng Tối ưu hoá sự phân tâm trong phần Cài đặt ô tô.
Đặt UXRestrictions 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 để biết mối quan hệ giữa các thành phần này:
Hình 1. Thành phần CarSettings
PreferenceController
là một thành phần nhận biết 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 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>
Chế độ cài đặt ô tô ngăn chặn việc tạo PreferenceController
thông qua mã một cách rõ ràng để giúp bạn dễ dàng sửa đổi hệ phân cấp Cài đặt với ít thay đổi nhất đối với mã Java.
Có thể PreferenceController
cần một số dữ liệu động để hoạt động đúng cách. 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ẽ thực hiện hành động.
Vì PreferenceControllers
luôn được xác định trong XML, nên không có cách nào để 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à được đặt 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); } }
Bạn càng sử dụng phương thức use(...)
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ệ phân cấp cài đặt với ít thay đổi nhất đối với mã Java, vì các 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 làm việc này là:
- Hạn chế tối đa việc sử dụng
use(...)
. - Cố gắng giữ mọi lệnh gọi đến
use(...)
ở một nơi trong mảnh (ví dụ: trong phương thứconAttach()
).
Xử lý ý định
Tất cả ý định mà ứng dụng Cài đặt ô tô sẽ xử lý đều được xác định trong tệp 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, 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 mảnh gốc
Nếu muốn, bạn có thể hiển thị hoặc ẩn biểu tượng Thoát 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 ô tô chủ yếu sử dụng CarSettingTheme
, là một phần mở rộng của Theme.CarUi
. Giao diện này được 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
Bạn có thể tuỳ chỉnh lựa chọn ưu tiên cho 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_preference
và lớp phủ cho các bản dựng ô tô. Bạn có thể thay thế mọi bố cục tuỳ chỉnh cho các lớp tuỳ chọn cơ sở tại đây. - Chế độ cài đặt ô tô sử dụng một số tuỳ chọn ưu tiên tuỳ chỉnh được xác định chủ yếu trong gói
common
. Các lớp này phải được phủ trong mô-đun Cài đặt ô tô, tách biệt với các lớp tuỳ chọn cơ sở.