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