Các biểu tượng thích ứng duy trì hình dạng nhất quán trong thiết bị nhưng thay đổi tuỳ theo thiết bị chỉ có một thành phần biểu tượng do nhà phát triển cung cấp. Ngoài ra, các biểu tượng hỗ trợ 2 lớp (nền trước và nền sau) có thể dùng để chuyển động đem lại sự thích thú về hình ảnh cho người dùng.
Trình triển khai thiết bị cung cấp một mặt nạ thiết bị giúp quyết định hình dạng của tất cả biểu tượng trên thiết bị. Biểu tượng này sẽ được dùng trên mọi nền tảng giao diện người dùng hệ thống có sử dụng Biểu tượng trình chạy (ví dụ: trình chạy, tổng quan, cài đặt và trang tính chia sẻ).
Ví dụ và nguồn
Ví dụ về mã:
platform/development/samples/AdaptiveIconSample/
Tài liệu dành cho nhà phát triển:
Mã nguồn:
platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
Triển khai
Để thay đổi hình dạng của biểu tượng trên một nền tảng, hãy phủ một chuỗi vào
framework/base/core/res/res/values/config.xml
, như sau:
<!-- Specifies the path that is used by AdaptiveIconDrawable class to crop launcher icons. --> <string name="config_icon_mask" translatable="false">"M50,0L100,0 100,100 0,100 0,0z"</string>
Định dạng và cú pháp của chuỗi tuân theo tiêu chuẩn W3, SVG cho đường dẫn định nghĩa. Định dạng này cho PathData là định dạng vectơ vẽ được của Android của chúng tôi.
Đường dẫn này phải lồi và phải tuân theo Safezone (66/71 = 91%) trong ranh giới khung hiển thị. Điều này được thực thi trong một trong các bài kiểm thử CTS.
Nếu bạn quyết định dùng một vòng tròn làm mặt nạ nền tảng, hãy nhớ phủ lên trên config_useRoundIcon = true. Nếu không, hãy đặt giá trị cấu hình này là false hoặc không chỉ định giá trị cấu hình này.
API biểu tượng thích ứng
API của lớp AdaptiveIconDrawable
được thể hiện dưới đây:
package android.graphics.drawable; public class AdaptiveIconDrawable extends Drawable implements Drawable.Callback { method public Drawable getBackground(); method public Drawable getForeground(); method public Path getIconMask(); method public Region getSafeZone(); method public float getExtraInsetFraction(); method public int getOpacity(); method public void invalidateDrawable(Drawable); method public void scheduleDrawable(Drawable, Runnable, long); method public void setAlpha(int); method public void setColorFilter(ColorFilter); method public void setOpacity(int); method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); }
public class Icon extends Parceleable { method public Bitmap createWithAdaptiveBitmap(); }
Cách triển khai tệp đối chiếu
Không cần làm gì để hiển thị biểu tượng thích ứng tĩnh trên bất kỳ Nền tảng giao diện người dùng hệ thống. Khi PackageManager trả về một đối tượng có thể vẽ, bạn chỉ cần liên kết đối tượng đó với ImageView. Đây là cách các biểu tượng được hiển thị trong các nền tảng Pre-O.
Về việc kết xuất hiệu ứng chuyển động động, Trình chạy 3 (nền tảng/gói/ứng dụng/Trình chạy3) sẽ có phần triển khai tham chiếu hiển thị cách đạt được hiệu ứng trong O-MR1.
Xác nhận kết quả
Để xác thực quá trình triển khai, sau khi ghi đè mặt nạ theo ý muốn của họ, hãy xem nếu các biểu tượng được hiển thị chính xác trong Launcher3, phần Cài đặt, Tổng quan và Cài đặt. Bạn cũng có thể chạy AdaptiveIconDrawableTest.java và AdaptiveIconMaskTest.java bên trong trường hợp kiểm thử CTS đồ hoạ để kiểm thử hoạt động triển khai.
Bạn có thể tìm thấy trường hợp kiểm thử thủ công được đề xuất tại: platform/development/samples/AdaptiveIconSample/.
Vấn đề đã biết
Sau đây là các vấn đề đã biết:
- Các biểu tượng mờ, tuỳ thuộc vào cách xác định đường dẫn mặt nạ.
- Biểu tượng lối tắt được phóng to nếu nhà phát triển ứng dụng không sử dụng
Phương thức
Icon.createWithAdaptiveBitmap()
hoặc không sử dụng phương thức này đúng cách. Để phương thức này hoạt động đúng cách, giá trị Bitmap được truyền phải là được đệm 25% ở cả bốn mặt.
Bạn có thể giải quyết những vấn đề này như sau:
- Mặt nạ phải được xác định trong hệ toạ độ [0, 100] x [0, 100].
- Đảm bảo rằng hình ảnh được sử dụng cho biểu tượng thích ứng (biểu tượng trình chạy , lối tắt) có đủ khoảng đệm (25%) ở cả bốn phía.