Kể từ Android 12, thiết kế Material You tập trung vào tính biểu đạt và tính linh hoạt trong hệ điều hành Android, với mục tiêu giúp người dùng tạo và sở hữu một trải nghiệm duy nhất, nhất quán, phù hợp với nhu cầu của họ. Là đối tác của Android, bạn nên kết hợp thiết kế Material You vào các thiết bị Android của mình ở những khía cạnh sau:
- Màu động
- Chuyển động
- Tiện ích
Màu động
Màu động là trọng tâm của thiết kế Material You và là một phần quan trọng trong chiến lược nhiều năm của Android nhằm mang đến cho người dùng khả năng tuỳ chỉnh đơn giản và chuyên sâu hơn theo cách mà không thiết bị nào khác làm được. Material You cung cấp:
Người dùng và nhà phát triển có một câu chuyện nhất quán và phong phú về hoạt động cá nhân hoá trên mọi thiết bị Android.
Các OEM Android có cơ hội tiếp tục đổi mới giao diện người dùng hệ thống và các ứng dụng bên thứ nhất theo cách phù hợp với phần cứng, màu sắc thương hiệu, nhà sản xuất và hình thức của họ.
Để tận dụng màu linh động, hãy sử dụng câu chuyện trích xuất màu Material You của Android 12 làm phần chính trong phần mềm bạn cung cấp cho người dùng. Trên thiết bị, hãy sử dụng logic trích xuất màu có trong AOSP, đặc biệt là logic nhận một hình nền hoặc màu nguồn giao diện duy nhất và xuất màu đó thông qua 65 API màu. Để biết các yêu cầu về màu động, hãy xem phần Sử dụng màu động.
Luồng màu động đầy đủ bao gồm 4 bước, như minh hoạ dưới đây:
Hình 1. Quy trình sử dụng màu động của Material You
Người dùng thay đổi hình nền hoặc giao diện thông qua bộ chọn của OEM.
Người dùng chọn một trong các lựa chọn sau:
Giao diện thiết bị. Khi bạn chọn, Android sẽ tự động chọn một màu nguồn duy nhất đáp ứng các yêu cầu.
Hình nền và giao diện mới. Khi bạn chọn, logic AOSP sẽ tự động chọn một màu nguồn duy nhất từ hình nền đã chọn.
AOSP mở rộng màu nguồn duy nhất thành 5 bảng sắc độ, mỗi bảng có 13 biến thể màu sắc theo logic của AOSP, sau đó điền vào 65 thuộc tính màu.
Giao diện người dùng của ứng dụng sử dụng 65 thuộc tính màu theo cách nhất quán trên toàn bộ hệ sinh thái ứng dụng Android. Bạn nên sử dụng cùng một bảng màu cho Giao diện người dùng hệ thống của thiết bị và các ứng dụng dành riêng cho nhà sản xuất thiết bị gốc.
Bản vá Android 12
Để có được logic từ đầu đến cuối cho quy trình trích xuất màu hình nền và cho phép thiết bị điền 65 API màu theo cách nhất quán với hệ sinh thái, hãy đưa các bản vá sau vào quá trình triển khai Android 12:
Bắt buộc
Rất nên dùng
- Khắc phục tình trạng tương tranh khi thiết lập sysprop màu khởi động.
- Cho phép lớp phủ nhận thông báo về các thay đổi đối với giao diện
- Khắc phục tình trạng tương tranh khi thiết lập sysprop màu khởi động (vòng 2)
- Di chuyển FeatureFlags sang gói cờ.
- Triển khai chính xác tính năng hỗ trợ tạo giao diện cho nhiều người dùng
- Khắc phục vấn đề thiếu lựa chọn màu hình nền đã chỉ định sau khi khởi động lại
- Khắc phục lỗi khi tính toán sắc độ bậc ba
- Không cho phép các ứng dụng chạy ở chế độ nền thay đổi giao diện
Chỉ định màu tuỳ chỉnh trên ThemePicker
Nếu bạn đang sử dụng ứng dụng ThemePicker của AOSP, thì ứng dụng WallpaperPicker sẽ hiển thị phần màu nếu cả hai điều kiện sau đây đều được đáp ứng:
flag_monettrênframeworks/base/packages/SystemUI/res/values/flags.xmllàtrue.- Một APK stub hệ thống có tên gói được xác định trong
themes_stub_packagetrong tệppackages/apps/ThemePicker/res/values/override.xml.
Định dạng APK stub
Bạn có thể tìm thấy phiên bản mẫu của APK này trong packages/apps/ThemePicker/themes.
APK này chỉ nên chứa các tài nguyên, nêu chi tiết về các màu cơ bản hiện có và tên của chúng.
Stub phải chứa một tệp XML trong res/xml theo định dạng sau:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="color_bundles">
<item>color1</item>
<item>color2</item>
<item>color3</item>
<item>color4</item>
</array>
<string name="bundle_name_color1">Blue</string>
<string name="bundle_name_color2">Red</string>
<string name="bundle_name_color3">Yellow</string>
<string name="bundle_name_color4">Green</string>
</resources>
Trong tệp này, mỗi item trong color_bundles đều có một tên riêng biệt, miễn là các chuỗi bên dưới có tên là bundle_name_item.
Phải có một chuỗi bundle_name_item cho mỗi màu, kèm theo tên mô tả cho từng màu. Bạn có thể dịch các chuỗi này bằng cách thêm các chuỗi đã dịch tương ứng vào thư mục res/values-language code.
Giá trị màu thực tế có thể nằm trên cùng một XML hoặc trên một tệp XML tài nguyên riêng biệt có định dạng sau:
<resources>
<color name="color_primary_color1">#0000FF</color>
<color name="color_secondary_color1">#0000FF</color>
<color name="color_primary_color2">#ff0000</color>
<color name="color_secondary_color2">#ff0000</color>
<color name="color_primary_color3">#ffff00</color>
<color name="color_secondary_color3">#ffff00</color>
<color name="color_primary_color4">#00ff00</color>
<color name="color_secondary_color4">#00ff00</color>
</resources>
Đối với mỗi mặt hàng trong mảng gói màu, phải có một mục color_primary_item và một mục color_secondary_item (và cả hai màu phải giống nhau). Các giá trị cho những mục color này là mã màu thực tế cho từng màu sẽ xuất hiện trong phần màu cơ bản.
Bước 1: Xây dựng trải nghiệm tạo giao diện cho người dùng
Công cụ chọn giao diện là nơi người dùng tương tác với các chức năng cá nhân hoá mới của Material You và có thể chọn giữa các lựa chọn màu sắc hoặc chế độ cài đặt sẵn. Khi phù hợp với sản phẩm và nhân khẩu học người dùng, bạn có thể mang đến cho người dùng trải nghiệm cá nhân hoá và màu sắc phong phú hơn thông qua việc sử dụng trình chọn giao diện hoặc trình chọn hình nền.
- Khi bạn sử dụng một công cụ chọn hình nền, tính năng trích xuất màu hình nền sẽ bật theo mặc định. Tuy nhiên, bạn có thể tuỳ chỉnh một số thành phần chọn để cung cấp nhiều lựa chọn hơn cho người dùng.
Bước 2: Trích xuất màu hình nền thành màu nguồn
Để bật tính năng trích xuất màu hình nền, hãy chọn các bản vá Android 12 được liệt kê ở trên (chức năng này sẽ được bật theo mặc định trong bản phát hành AOSP trong tương lai).
Logic AOSP kích hoạt quá trình trích xuất hình nền bắt đầu từ frameworks/base/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java, trên ThemeOverlayController#mOnColorsChangedListener, thông qua WallpaperManager#onWallpaperColorsChanged. Bạn nên sử dụng logic AOSP chưa sửa đổi để đảm bảo trải nghiệm phát triển nhất quán.
Theo mặc định, logic này sẽ chọn màu có tần suất cao nhất phù hợp để sử dụng.
Để tận dụng các màu nguồn khác do thuật toán trả về và trình bày những màu đó cho người dùng trong công cụ chọn giao diện, hãy sử dụng ColorScheme#getSeedColors(wallpaperColors: WallpaperColors).
Để phù hợp với mục đích sử dụng, màu nguồn (cho dù được trích xuất từ hình nền hay một màu đặt sẵn do người dùng chọn) phải có giá trị sắc độ CAM16 tối thiểu là 5; điều này đảm bảo rằng màu nguồn không bị ảnh hưởng bởi các tông màu tối tinh tế khi được chuyển đổi từ một màu duy nhất thành 65 màu sắc và vẫn đại diện cho lựa chọn của người dùng. Để đọc và sửa đổi màu trong CAM16, hãy dùng Cam#fromInt hoặc Cam#getInt.
Sử dụng bảng màu không động Đối với những thiết bị không hỗ trợ tính năng trích xuất màu từ hình nền, bạn vẫn có thể đảm bảo rằng các ứng dụng của Google và ứng dụng bên thứ ba hỗ trợ màu động trông đẹp mắt bằng cách làm như sau:
- Sử dụng bảng màu Material mặc định bằng cách tắt
flag_monettrênframeworks/base/packages/SystemUI/res/values/flags.xml.- Đảm bảo người dùng vẫn có thể cá nhân hoá hệ điều hành của họ bằng một trình chọn giao diện đặt sẵn.
Bước 3: Mở rộng màu nguồn thành các API màu
Bằng cách sử dụng màu nguồn duy nhất có được từ bước trước, Android sẽ tạo ra 5 bảng sắc độ riêng biệt (nhấn mạnh 1-3, trung tính 1-2), mỗi bảng có 13 màu và mỗi màu có các giá trị độ chói khác nhau (từ 0 đến 1000), tổng cộng là 65 màu. Logic được cung cấp trong các bản vá Android 12 triển khai đúng cách việc mở rộng màu này; thông tin chi tiết được cung cấp bên dưới mô tả quá trình triển khai.
Để đảm bảo tính nhất quán cho nhà phát triển, 5 bảng sắc độ (accent1, accent2, accent3, neutral1, neutral2) và 13 màu tương ứng phải dựa trên một màu nguồn duy nhất với các thay đổi tương ứng về giá trị sắc độ và tông màu CAM16 như được viết bên dưới:
-
- Chroma: sử dụng "16"
- Tông màu: giống như nguồn
-
- Chroma: sử dụng "32"
- Sắc độ: xoay 60 độ theo chiều dương
-
- Độ bão hoà: sử dụng "4"
- Tông màu: giống như nguồn
-
- Chroma: sử dụng "8"
- Tông màu: giống như nguồn
CTS bao gồm các kiểm thử để xác thực các lệnh gọi API về độ chói và sắc độ. Để chạy, hãy sử dụng atest SystemPalette.
Bước 4: Sử dụng màu động trong các ứng dụng và giao diện người dùng hệ thống
Sau khi bạn đặt màu động trên một thiết bị, các ứng dụng sẽ tuân theo nguyên tắc của Material để sử dụng các màu đó. Nguyên tắc Material sẽ được phát hành trên material.io muộn nhất vào ngày 26 tháng 10 năm 2021 để các ứng dụng bên thứ ba áp dụng. Đối với Giao diện người dùng hệ thống và các ứng dụng của bên thứ nhất, bạn nên tích hợp màu linh động trong suốt trải nghiệm người dùng theo cách phù hợp với phần cứng và thương hiệu của bạn, đồng thời giúp bạn phân biệt các thiết bị của mình.
Để biết hướng dẫn chung về màu sắc động, hãy xem những nội dung sau:
Sử dụng màu nhấn cho các phần tử trên nền trước trong ứng dụng và giao diện người dùng hệ thống:
@android:color/system_accent1_0 … 1000 // most-used foreground color group @android:color/system_accent2_0 … 1000 // alternate accent, used for surfaces @android:color/system_accent3_0 … 1000 // playful, analogous colorSử dụng màu trung tính cho các phần tử nền trong ứng dụng và Giao diện người dùng hệ thống:
@android:color/system_neutral1_0 … 1000 // most-used background color group @android:color/system_neutral2_0 … 1000 // used for higher-elevation surfaces
Để biết thêm thông tin về cách Material You ánh xạ màu và cách các API được dùng trong SysUI, hãy xem phần Tài nguyên bổ sung.
Bước 5: Thêm các lựa chọn về màu động trong quá trình triển khai WallpaperPicker của AOSP
Tạo cho Android 13 trở lên
Kể từ Android 13, android.theme.customization.accent_color không được dùng nữa. Một thuộc tính mới android.theme.customization.theme_style được thêm vào để hỗ trợ các biến thể màu sắc khác nhau. Chúng tôi hiện có 4 biến thể trong cơ sở mã như sau:
TONAL_SPOT = Default Material You theme since Android S.
VIBRANT = Theme where accent 2 and 3 are analogous to accent 1.
EXPRESSIVE = Highly chromatic theme.
SPRITZ = Desaturated theme, almost grayscale.
Các thông tin này được gửi đến Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES, như minh hoạ trong JSON bên dưới:
{
"android.theme.customization.system_palette":"B1611C",
"android.theme.customization.theme_style":"EXPRESSIVE"
}
Tạo cho Android 12 trở xuống
Khi dùng một bộ chọn giao diện tuỳ chỉnh, thiết bị phải gửi một màu nguồn hợp lệ đến Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES bằng cách cung cấp một tệp JSON ở định dạng sau (trong đó 746BC1 là một ví dụ về màu nguồn hợp lệ):
{
"android.theme.customization.system_palette":"746BC1",
"android.theme.customization.accent_color":"746BC1"
}
Thao tác này sẽ bỏ qua bước trích xuất màu hình nền (Bước 2) và mở rộng trực tiếp màu nguồn đã cung cấp thành 65 thuộc tính màu (Bước 3).
Bước 6: Gửi phiếu yêu cầu hỗ trợ
Ngoài việc tích hợp hệ thống, bạn cần gửi phiếu yêu cầu và cho chúng tôi biết tên thương hiệu của bạn (Build.MANUFACTURER). Vì hầu hết các ứng dụng bên thứ ba đều đang sử dụng Các thành phần Material cho Android để hiển thị màu động, nên chúng tôi đang sử dụng một danh sách cho phép được mã hoá cứng để cho biết những thiết bị nào đã tích hợp tính năng Bảng màu sắc thái động.
Chuyển động
Chuyển động mượt mà mang đến cảm giác hiện đại và cao cấp cho thiết bị. Để xây dựng và duy trì niềm tin cũng như sự hài lòng của nhà phát triển, hiệu ứng cuộn quá mức và hiệu ứng gợn sóng là hai phần quan trọng của chuyển động mượt mà cần có giao diện và cảm giác nhất quán.
Sử dụng thao tác kéo quá mức trong hệ điều hành
Android 12 có chuyển động cuộn quá mức linh hoạt và phản hồi nhanh hơn dưới dạng một chế độ xem kéo giãn, xuất hiện khi người dùng cố gắng cuộn qua cạnh của một danh sách. Sau đây là ví dụ minh hoạ:
Hình 2. Hiệu ứng cuộn quá mức của Android 12, như trong phần Cài đặt
Để đảm bảo tính nhất quán cho nhà phát triển, hãy đảm bảo hiệu ứng cuộn quá mức tổng thể trên thiết bị của bạn tương tự như sau:
Trên các thiết bị trả về giá trị true cho
ActivityManager.isHighEndGfx(), hiệu ứng cuộn quá mức là hiệu ứng kéo giãn không tuyến tính của màn hình (như minh hoạ ở trên).Trên các thiết bị có hiệu suất thấp, hiệu ứng kéo giãn được đơn giản hoá thành hiệu ứng kéo giãn tuyến tính (để giảm tải cho hệ thống).
Sử dụng thao tác kéo quá mức trong các ứng dụng bên thứ nhất
Khi sử dụng các thành phần hiển thị tuỳ chỉnh, bạn có thể cần điều chỉnh một số ứng dụng và giao diện người dùng hệ thống sử dụng hiệu ứng kéo giãn.
Để hỗ trợ tính năng kéo quá mức, hãy nâng cấp lên các thư viện mới nhất:
androidx.recyclerview:recyclerview:1.3.0-alpha01choRecyclerViewandroidx.core:core:1.7.0-alpha01choNestedScrollViewvàEdgeEffectCompatandroidx.viewpager:viewpager:1.1-alpha01choViewPager
Đối với những bố cục tuỳ chỉnh sử dụng
EdgeEffect, hãy cân nhắc những thay đổi sau đây về trải nghiệm người dùng:Với hiệu ứng kéo khi cuộn quá mức, người dùng không được tương tác với nội dung của bố cục trong khi nội dung đó đang được kéo. Người dùng chỉ nên thao tác với chính phần nội dung được kéo giãn và không thể nhấn nút trong nội dung đó.
Khi người dùng chạm vào nội dung trong lúc ảnh động
EdgeEffectđang diễn ra, họ sẽ bắt được ảnh động và được phép thao tác với hiệu ứng kéo giãn. Giá trị kéo hiện tại có trongEdgeEffectCompat.getDistance().Để thao tác với giá trị kéo và trả về số lượng đã sử dụng, hãy dùng
onPullDistance(). Điều này cho phép nhà phát triển chuyển đổi mượt mà từ thao tác kéo giãn sang thao tác cuộn khi ngón tay kéo giãn nội dung vượt quá vị trí bắt đầu.Khi làm việc với thao tác cuộn lồng nhau, nếu nội dung bị kéo giãn, thì thao tác kéo giãn sẽ tiêu thụ chuyển động chạm trước nội dung lồng nhau, nếu không, thao tác lồng nhau có thể cuộn khi ngón tay thay đổi hướng thay vì thả thao tác kéo giãn.
Để biết thông tin chi tiết về thao tác cuộn quá mức, hãy tham khảo bài viết Tạo ảnh động cho Cử chỉ cuộn.
Sử dụng hiệu ứng gợn sóng (phản hồi khi chạm) trong hệ điều hành
Android 12 có hiệu ứng gợn sóng khi chạm nhẹ nhàng và tinh tế hơn để cung cấp ý kiến phản hồi cho người dùng khi họ nhấn xuống.
Hình 3. Hiệu ứng gợn sóng của Android 12, với ảnh động đổ đầy mượt mà hơn
Để nhà phát triển có thể dự đoán và mang lại trải nghiệm tuyệt vời cho người dùng, hãy đảm bảo hiệu ứng gợn sóng trên thiết bị của bạn tương tự như ví dụ minh hoạ ở trên. Mặc dù không cần thực hiện bất kỳ bước tích hợp cụ thể nào để hỗ trợ hiệu ứng gợn sóng, nhưng bạn nên kiểm thử hiệu ứng này trên các thiết bị của mình để kiểm tra xem có bất kỳ lỗi hồi quy không mong muốn nào xuất hiện trong quá trình triển khai hay không.
Tiện ích
Tiện ích là thành phần chính của thiết bị Android. Android 12 có các API và chức năng API mới mà tất cả các OEM đều phải hỗ trợ.
Trong hệ điều hành của bạn, hãy hỗ trợ các API dành cho nhà phát triển liên quan đến bố cục, kích thước và các thông số phần mềm của tiện ích (ví dụ: kích thước góc bo tròn). Quy trình triển khai của bạn phải hỗ trợ đúng cách các tiện ích trong việc cung cấp các tham số thông qua API và đảm bảo người dùng có thể định cấu hình và thay đổi kích thước tiện ích.
Trong ứng dụng của bạn, hãy tận dụng các chức năng API mới để cập nhật hoặc tạo các tiện ích mới của bên thứ nhất nếu có thể. Đối với tất cả các tiện ích ứng dụng của bên thứ nhất trong phạm vi của bạn, hãy xem danh sách kiểm tra dành cho nhà phát triển bên dưới.
- Mức độ ưu tiên dựa trên đề xuất của nền tảng.
- Để biết thông tin chi tiết về một đề xuất, hãy nhấp vào đường liên kết trong cột Thay đổi.
Khu vực Thay đổi Mức độ ưu tiên triển khai Cải thiện trải nghiệm trên trang chủ Thêm bản xem trước có thể mở rộng P1 Thêm nội dung mô tả tiện ích P1 Giúp bạn dễ dàng cá nhân hoá tiện ích hơn P2 (không bắt buộc) Bật chế độ chuyển đổi mượt mà hơn P0 Tránh các thành phần phản hồi với thao tác nhấn vào thông báo truyền tin P0 Áp dụng nguyên tắc về tiện ích Cải thiện kích thước và bố cục của tiện ích P2 Áp dụng màu động P0 Triển khai góc bo tròn P0 Thêm các nút kết hợp mới P2 Đơn giản hoá mã tiện ích hiện có Đơn giản hoá các bộ sưu tập RemoteView P2 Đơn giản hoá thời gian chạy RemoteView P2
Tài nguyên khác
Cách sử dụng màu trong SysUI
(accent1 = A1, accent2 = A2, accent3 = A3, neutral1 = N1, neutral2 = N2)
Hình 4. Sử dụng màu động trong Giao diện người dùng hệ thống
Thông tin cập nhật về thuộc tính màu trong thư viện Material
Material sẽ cập nhật các thuộc tính giao diện trong bản phát hành sắp tới bằng cách tạo các vai trò màu dùng để cung cấp màu cho các thành phần hiển thị cụ thể.
| Vai trò về màu sắc | Thuộc tính giao diện Android | Giao diện sáng Màu động |
Giao diện tối Màu tự động |
|---|---|---|---|
| Chính | colorPrimary | system_accent1_600 | system_accent1_200 |
| Trên màu chính | colorOnPrimary | system_accent1_0 | system_accent1_800 |
| Cấp hai | colorSecondary | system_accent2_600 | system_accent2_200 |
| Trên màu cấp hai | colorOnSecondary | system_accent2_0 | system_accent2_800 |
| Lỗi | colorError | Không áp dụng (red_600) | Không áp dụng (red_200) |
| Trên màu của lỗi | colorOnError | Không áp dụng (trắng) | Không áp dụng (red_900) |
| Thông tin khái quát | android:colorBackground | system_neutral1_10 | system_neutral1_900 |
| Trên nền | colorOnBackground | system_neutral1_900 | system_neutral1_100 |
| Bề mặt | colorSurface | system_neutral1_10 | system_neutral1_900 |
| Trên khu vực | colorOnSurface | system_neutral1_900 | system_neutral1_100 |
Material sẽ cập nhật các thuộc tính trạng thái bằng những con trỏ sau:
| Vai trò về màu sắc | Thuộc tính giao diện Android | Giao diện sáng Màu động |
Giao diện tối Màu tự động |
|---|---|---|---|
| Nội dung trạng thái chính | colorPrimaryStateContent | system_accent1_700 | system_accent1_200 |
| Lớp trạng thái chính | colorPrimaryStateLayer | system_accent1_600 | system_accent1_300 |
| Nội dung của tiểu bang thứ hai | colorSecondaryStateContent | system_accent2_700 | system_accent2_200 |
| Lớp trạng thái phụ | colorSecondaryStateLayer | system_accent2_600 | system_accent2_300 |
| Nội dung ở trạng thái chính | colorOnPrimaryStateContent | system_accent1_0 | system_accent1_800 |
| Trên lớp trạng thái chính | colorOnPrimaryStateLayer | system_accent1_900 | system_accent1_800 |
| Trên nội dung phụ | colorOnSecondaryStateContent | system_accent2_0 | system_accent2_800 |
| Trên lớp trạng thái phụ | colorOnSecondaryStateLayer | system_accent2_900 | system_accent2_800 |
| Nội dung về trạng thái vùng chứa chính | colorOnPrimaryContainerStateContent | system_accent1_900 | system_accent1_900 |
| Trên lớp trạng thái vùng chứa chính | colorOnPrimaryContainerStateLayer | system_accent1_900 | system_accent1_900 |
| Nội dung về trạng thái vùng chứa phụ | colorOnSecondaryContainerStateContent | system_accent2_900 | system_accent2_900 |
| Trên lớp trạng thái vùng chứa phụ | colorOnSecondaryContainerStateLayer | system_accent2_900 | system_accent2_900 |
| Nội dung về trạng thái vùng chứa cấp ba | colorOnTertiaryContainerStateContent | system_accent3_900 | system_accent3_900 |
| Trên lớp trạng thái vùng chứa cấp ba | colorOnTertiaryContainerStateLayer | system_accent3_900 | system_accent3_900 |
| Nội dung về trạng thái của thiết bị | colorOnSurfaceStateContent | system_neutral1_900 | system_neutral1_100 |
| Lớp trạng thái trên bề mặt | colorOnSurfaceStateLayer | system_neutral1_900 | system_neutral1_100 |
| Nội dung trạng thái On Surface Variant | colorOnSurfaceVariantStateContent | system_neutral2_700 | system_neutral2_200 |
| On Surface Variant State Layer | colorOnSurfaceVariantStateLayer | system_neutral2_700 | system_neutral2_200 |
| Nội dung trạng thái lỗi | colorErrorStateContent | red800 | red200 |
Câu hỏi thường gặp
Trích xuất màu
Sau khi người dùng thay đổi hình nền, quá trình trích xuất màu có tự động diễn ra hay cần được kích hoạt từ một nơi nào đó?
Với các bản vá Android 12, tính năng trích xuất màu từ hình nền sẽ bật theo mặc định.
ThemeOverlayController.java kích hoạt logic bằng ThemeOverlayController#mOnColorsChangedListener và WallpaperManager#onWallpaperColorsChanged.
Đối với Hình nền động hoặc Hình nền video, chúng ta có thể biết thời điểm tính năng Trích xuất màu lấy màu từ màn hình không? Một số người dùng có thể muốn màu sắc của khung hình cuối cùng vì khung hình này xuất hiện trong thời gian dài nhất.
Quá trình trích xuất màu được kích hoạt khi người dùng đặt hình nền hoặc sau khi màn hình tắt rồi bật lại (để phản hồi WallpaperEngine#notifyColorsChanged). Sự kiện WallpaperColors cuối cùng (từ hình nền động) được áp dụng sau khi người dùng tắt rồi bật lại màn hình.
Bộ chọn giao diện/hình nền
Làm cách nào để bật công cụ chọn giao diện nhằm cho phép người dùng chọn nhiều màu nguồn thay vì màu có tần suất cao nhất? Có cách nào để lấy những màu đó từ logic trích xuất không?
Có. Trong trình chọn giao diện, bạn có thể sử dụng ColorScheme#getSeedColors(wallpaperColors: WallpaperColors).
Có một tính năng trên điện thoại Pixel có tên là biểu tượng theo chủ đề. Bản vá này có nằm trong 3 bản vá mà bạn đã chia sẻ không? Các nhà sản xuất thiết bị gốc (OEM) có thể triển khai tính năng đó bằng cách nào?
Không. Biểu tượng theo chủ đề đang ở giai đoạn thử nghiệm và không có trong Android 12.
Có cách nào để dùng ứng dụng Hình nền của Google khi đã bật tính năng trích xuất và chọn màu không?
Có. Bạn có thể triển khai các tính năng này trong phiên bản mới nhất của ứng dụng Google Hình nền bằng cách làm theo các bước tích hợp được mô tả trước đó trên trang này.
Hãy liên hệ với TAM của bạn để biết thêm thông tin chi tiết.
Google có thể chia sẻ ứng dụng hoặc mã nguồn để các OEM có thể triển khai phiên bản xem trước màu động của riêng họ trên trình đơn cài đặt, trông tương tự như phần xem trước xuất hiện trên ứng dụng Bộ chọn hình nền của Google không?
Các lớp chính kết xuất bản xem trước là WallpaperPicker2 và Launcher3.
Màn hình xem trước hình nền là WallpaperSectionController.
Làm cách nào để triển khai Xem trước sau khi thay đổi màu sắc, như minh hoạ trong ứng dụng Hình nền của Google?
Ứng dụng Bộ chọn hình nền yêu cầu Trình chạy cung cấp một ContentProvider (trình chạy dựa trên Launcher3 có ContentProvider). Bản xem trước do GridCustomizationsProvider cung cấp trong Trình chạy. Bản xem trước này phải được tham chiếu trong siêu dữ liệu của Hoạt động chính của Trình chạy để ứng dụng hình nền và kiểu đọc được. Tất cả những điều này đều được triển khai trong Launcher3 của AOSP và được cung cấp cho các OEM.