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ô:
- Thêm chế độ cài đặt cho ô tô
- Sắp xếp lại chế độ cài đặt trên ô tô
- Tối ưu hoá để chống phân tâm trong phần Cài đặt ô tô
- Lập chỉ mục tìm kiếm chế độ cài đặt cho ô tô
- Tuỳ chỉnh ngăn kép
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:
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ứconAttach()
).
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_preference
và lớ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ở.