ไอคอนแบบปรับอัตโนมัติจะคงรูปทรงที่เหมือนกันในอุปกรณ์แต่ละเครื่อง แต่แตกต่างกันไปตามอุปกรณ์แต่ละรุ่นโดยมีชิ้นงานไอคอนเพียงรายการเดียวที่นักพัฒนาแอประบุ นอกจากนี้ ไอคอนยังรองรับเลเยอร์ 2 เลเยอร์ (พื้นหน้าและพื้นหลัง) ที่ใช้สำหรับการเคลื่อนไหวเพื่อให้ผู้ใช้เห็นภาพได้ชัดเจน
ผู้ติดตั้งใช้งานอุปกรณ์จะระบุมาสก์อุปกรณ์ที่จะกำหนดรูปร่างของไอคอนทั้งหมดในอุปกรณ์ ไอคอนนี้จะใช้ในแพลตฟอร์ม UI ของระบบที่ใช้ไอคอน Launcher (เช่น ตัวเปิดแอป ภาพรวม การตั้งค่า และชีตการแชร์)
ตัวอย่างและแหล่งที่มา
ตัวอย่างโค้ด
platform/development/samples/AdaptiveIconSample/
เอกสารประกอบสำหรับนักพัฒนาแอป
ซอร์สโค้ด:
platform/frameworks/base/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java
การใช้งาน
หากต้องการเปลี่ยนรูปร่างของไอคอนบนแพลตฟอร์ม ให้วางซ้อนสตริง 1 รายการใน framework/base/core/res/res/values/config.xml
ดังนี้
<!-- 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>
รูปแบบและไวยากรณ์ของสตริงเป็นไปตามมาตรฐาน W3, SVG สําหรับคําจํากัดความของเส้นทาง รูปแบบ PathData นี้เป็นสิ่งที่รูปภาพที่วาดได้แบบเวกเตอร์ของ Android รองรับด้วย
เส้นทางนี้ควรเป็นเส้นโค้งนูนและควรเป็นไปตามโซนปลอดภัย (66/71 = 91%) ภายในขอบเขตของมุมมอง ซึ่งมีการบังคับใช้ในการทดสอบ CTS รายการใดรายการหนึ่ง
หากตัดสินใจที่จะใช้วงกลมเป็นมาสก์แพลตฟอร์ม ให้วางซ้อน config_useRoundIcon = true ด้วย หากไม่ใช่ ให้ตั้งค่าการกําหนดค่านี้เป็น False หรือไม่ต้องระบุค่าการกําหนดค่านี้
Adaptive Icon API
API สำหรับคลาส AdaptiveIconDrawable
แสดงอยู่ด้านล่าง
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(); }
การใช้งานอ้างอิง
คุณไม่จำเป็นต้องดำเนินการใดๆ เพื่อแสดงผลไอคอนแบบปรับอัตโนมัติแบบคงที่ในแพลตฟอร์ม UI ของระบบ เมื่อ PackageManager แสดงผล Drawable ให้แล้ว ให้จับคู่ Drawable นั้นกับ ImageView นี่เป็นวิธีที่ระบบแสดงผลไอคอนในแพลตฟอร์มเวอร์ชันก่อนเปิดตัว
สำหรับการเรนเดอร์เอฟเฟกต์การเคลื่อนไหวแบบไดนามิก Launcher3 (platform/packages/apps/Launcher3) จะมีการใช้งานอ้างอิงที่แสดงวิธีสร้างเอฟเฟกต์ใน O-MR1
การตรวจสอบความถูกต้อง
หากต้องการตรวจสอบการติดตั้งใช้งาน หลังจากลบล้างหน้ากากที่ต้องการแล้ว ให้ดูว่าไอคอนแสดงผลอย่างถูกต้องใน Launcher3, การตั้งค่า, ภาพรวม และการตั้งค่าหรือไม่ นอกจากนี้ คุณยังเรียกใช้ AdaptiveIconDrawableTest.java และ AdaptiveIconMaskTest.java ใน CTS TestCase ของกราฟิกเพื่อทดสอบการใช้งานได้ด้วย
เทสเคสที่แนะนำซึ่งทดสอบด้วยตนเองมีอยู่ที่ platform/development/samples/AdaptiveIconSample/
ปัญหาที่ทราบ
ปัญหาที่ทราบมีดังนี้
- ไอคอนเบลอ ซึ่งขึ้นอยู่กับการกำหนดเส้นทางมาสก์
- ไอคอนทางลัดที่ซูมเข้าหากนักพัฒนาแอปไม่ได้ใช้วิธี
Icon.createWithAdaptiveBitmap()
หรือไม่ได้ใช้วิธีนี้อย่างถูกต้อง เพื่อให้วิธีการนี้ทำงานได้อย่างถูกต้อง บิตแมปที่ส่งควรมีการเพิ่มพื้นที่ว่าง 25% ในทุกๆ ด้าน
ปัญหาเหล่านี้แก้ไขได้โดยทำดังนี้
- ควรกำหนดมาสก์ในระบบพิกัด [0, 100] x [0, 100]
- ตรวจสอบว่ารูปภาพที่ใช้สำหรับไอคอนแบบปรับอัตโนมัติ (ไอคอน Launcher , ทางลัด) มีระยะห่างจากขอบ (25%) เพียงพอในทุกๆ ด้าน