ใช้ไอคอนแบบปรับอัตโนมัติ

ไอคอนแบบปรับอัตโนมัติจะคงรูปทรงที่เหมือนกันในอุปกรณ์แต่ละเครื่อง แต่แตกต่างกันไปตามอุปกรณ์แต่ละรุ่นโดยมีชิ้นงานไอคอนเพียงรายการเดียวที่นักพัฒนาแอประบุ นอกจากนี้ ไอคอนยังรองรับเลเยอร์ 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%) เพียงพอในทุกๆ ด้าน