ใช้ไอคอนแบบปรับได้

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