Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release
thay vì aosp-main
để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Mẫu và thành phần
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Trong Android 8.0, trình đơn Cài đặt có thêm một số thành phần và tiện ích cho các mục đích sử dụng phổ biến. Nhà sản xuất thiết bị và nhà phát triển nên sử dụng các thành phần phổ biến khi mở rộng ứng dụng Cài đặt để giao diện người dùng mới luôn nhất quán với giao diện người dùng Cài đặt hiện có.
Dưới đây là nội dung tóm tắt về các điểm cải tiến:
- Thay đổi hành vi của đường phân chia trong khung Lựa chọn ưu tiên của thư viện hỗ trợ. Dòng phân cách hiện được vẽ giữa các danh mục.
- Thay đổi giao diện ActionBar. ActionBar hiện sử dụng giao diện màu sáng, với văn bản màu nhấn.
- Bố cục lựa chọn ưu tiên mới. Không gian cho biểu tượng vẫn còn ngay cả khi một tuỳ chọn không có biểu tượng.
Các tiện ích mới:
- Tiện ích tiêu đề cho thông tin chi tiết về ứng dụng. Hiển thị biểu tượng ứng dụng, nhãn ứng dụng và các thông tin khác.
- Nút mở rộng trên một số trang. Trang có thể bắt đầu ở trạng thái thu gọn và ẩn các mục ít quan trọng hơn cho đến khi người dùng nhấp vào nút mở rộng.
- Giao diện người dùng bộ chọn ứng dụng mặc định:
- Giao diện người dùng để chọn trình duyệt mặc định, ứng dụng điện thoại mặc định, v.v.
- Trước đây là một hộp thoại, giờ đây là một giao diện người dùng dựa trên nút chọn toàn màn hình.
- Lựa chọn ưu tiên kiểu "MasterSwitch". Đây là một tuỳ chọn ưu tiên có hai mục tiêu lượt nhấp. Mục tiêu bên trái dẫn đến một mảnh hoặc ý định con. Mục tiêu bên phải là một nút bật/tắt, kiểm soát trạng thái bật/tắt cho toàn bộ trang.
Ví dụ và nguồn
- Hành vi của đường phân chia
- Tất cả các trang trong phần Cài đặt đều được sửa đổi để sử dụng hành vi của dòng phân cách mới.
- Hành vi của đường phân chia được xác định là ThemeOverlay trong:
packages/apps/Settings/res/values/styles_preference.xml
- Thay đổi giao diện ActionBar
- Tất cả các trang trong phần Cài đặt đều được sửa đổi để sử dụng giao diện ActionBar mới.
- Giao diện được xác định trong Theme.DeviceDefault.Settings
- Bố cục lựa chọn ưu tiên mới
- Nhiều trang trong phần Cài đặt hiện đang sử dụng bố cục lựa chọn ưu tiên mới.
- Bạn có thể tìm thấy mã này trong:
packages/apps/Settings/res/values/styles_preference.xml
- Tiện ích tiêu đề ứng dụng
- Hầu hết các trang thông tin ứng dụng trong phần Cài đặt đều đã triển khai tiêu đề Ứng dụng mới.
- Bạn có thể xem các ví dụ và mã tại:
packages/apps/Settings/src/com/android/settings/applications/AppHeaderController.java
- Nút mở rộng
- Bộ chọn ứng dụng mặc định
- Bạn có thể tìm thấy mã cho lớp cơ sở trong:
packages/apps/Settings/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java
- Có một số lớp con của DefaultAppPickerFragment, mỗi lớp triển khai một bộ chọn cho ý định khác nhau.
- Lựa chọn ưu tiên về kiểu MasterSwitch
- Mã nằm ở:
https://cs.android.com/android/platform/superproject/+/main:packages/apps/Settings/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceController.java
- Một ví dụ về trường hợp sử dụng là nút chuyển chính Wi-Fi. Bạn có thể xem ví dụ tại:
packages/apps/Settings/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java
Triển khai
Các nhà sản xuất thiết bị có thể bắt đầu sử dụng tất cả các thành phần mới ngay từ đầu.
Nếu quyết định triển khai tuỳ chọn kiểu "MasterSwitch" mới hoặc bộ chọn ứng dụng mặc định, nhà sản xuất thiết bị gốc (OEM) nên làm theo các ví dụ trong tài liệu này và các tệp tham khảo (Javadoc) được viết bằng từng thành phần để biết thêm thông tin chi tiết.
Tuỳ chỉnh trình đơn cài đặt
- Hành vi của đường phân chia. Để thay đổi cách vẽ đường phân cách, hãy cập nhật kiểu cho các đường phân cách trong phần Cài đặt và thay đổi giá trị cho các mục sau:
allowDividerAbove
allowDividerBelow
allowDividerAfterLastItem
- Màu giao diện ActionBar. Các hoạt động nên sử dụng
Theme.DeviceDefault.Settings
làm giao diện hoặc tạo giao diện tuỳ chỉnh bằng cách sử dụng Theme.DeviceDefault.Settings
làm giao diện mẹ.
- Tiện ích tiêu đề ứng dụng. Sử dụng phương thức setter trong AppHeaderController để tuỳ chỉnh từng trường và gọi
build()
sau khi thiết lập tất cả các trường.
- Nút mở rộng:
- Để tắt hoàn toàn chức năng này, hãy ghi đè hàm khởi tạo cho ProgressiveDisclosureMixin và đặt keepExpanded thành true.
- Để tuỳ chỉnh số lượng mục hiển thị ban đầu, hãy gọi phương thức
ProgressiveDisclosureMixin.setTileLimit()
trong phương thức onAttach(Context)
của mảnh.
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Patterns and components\n\nIn Android 8.0, the Settings menu gains several components and widgets that\ncover common uses. Device manufacturers and developers are encouraged to use the\ncommon components when extending the Settings app so new user interfaces stay\nconsistent with the existing Settings UI.\n\n\nHere is a summary of improvements:\n\n- Divider behavior change in support library Preference framework. Divider is now drawn between categories.\n- ActionBar theme change. The ActionBar now uses light color theme, with accent color text.\n- New preference layout. The space for icons remains even when a preference has no icon.\n\n\nNew widgets:\n\n- A header widget for app details. Displays app icon, app label and other information.\n- An expand button on some pages. Page can start as collapsed and hide less important items until user clicks expand button.\n- Default app picker UI:\n - The UI for choosing default browser, default phone app, etc.\n - Formerly a dialog, now it's a full screen radio button-based UI.\n- A \"MasterSwitch\" style preference. This is a preference with two click targets. Left target leads to a subsetting fragment or intent. Right target is a switch toggle, controlling on/off for the entire page.\n\nExamples and source\n-------------------\n\n- Divider behavior\n - All pages in Settings are modified to use the new divider behavior.\n - The divider behavior is defined as a ThemeOverlay in: \n `packages/apps/Settings/res/values/styles_preference.xml`\n- ActionBar theme change\n - All pages in Settings are modified to use the new ActionBar theme.\n - The theme is defined in Theme.DeviceDefault.Settings\n- New preference layout\n - Many pages in Settings are now using the new preference layout.\n - You can find the code in: \n `packages/apps/Settings/res/values/styles_preference.xml`\n- App header widget\n - Most app information pages in Settings are already implementing the new App header.\n - Examples and code can be found at: \n `packages/apps/Settings/src/com/android/settings/applications/AppHeaderController.java`\n- Expand button\n - Examples and code can be found at: \n `packages/apps/Settings/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java`\n\n **Note:** This component must be used together with\n DashboardFragment. (See more details about DashboardFragment in [Updated Information Architecture](/docs/core/settings/info-architecture).)\n- Default app picker\n - You can find the code for base class in: \n `packages/apps/Settings/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragment.java`\n - There are several subclasses of DefaultAppPickerFragment, each implementing a picker for different intent.\n- *MasterSwitch* style preference\n - Code is at: `https://cs.android.com/android/platform/superproject/+/main:packages/apps/Settings/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceController.java`\n - An example use case is Wi-Fi primary switch. You can find an example at: `packages/apps/Settings/src/com/android/settings/wifi/WifiMasterSwitchPreferenceController.java`\n\nImplementation\n--------------\n\n\nDevice manufacturers can start using all of the new components out of the box.\nIf OEMs decide to implement a new \"MasterSwitch\" style preference or default app\npicker, they should follow the examples in this document and the reference files\n(Javadoc) written with each component for more details.\n\nCustomize the settings menu\n---------------------------\n\n- Divider behavior. To change how divider is drawn, update the style for Settings dividers and change the value for the following:\n - `allowDividerAbove`\n - `allowDividerBelow`\n - `allowDividerAfterLastItem`\n- ActionBar theme color. Activities should use `Theme.DeviceDefault.Settings` as their theme, or create a custom theme using `Theme.DeviceDefault.Settings` as parent.\n- App header widget. Use setters in AppHeaderController to customize each field and call `build()` once all fields are set.\n- Expand button:\n - To fully disable the functionality, override the constructor for ProgressiveDisclosureMixin and set keepExpanded to true.\n - To customize how many items to show initially, call the `ProgressiveDisclosureMixin.setTileLimit()` method during fragment's `onAttach(Context)` method."]]