實施自適應圖標

自適應圖示在裝置內保持一致的形狀,但因裝置而異,開發人員僅提供一個圖示資源。此外,圖示支援兩層(前景和背景),可用於運動,為使用者提供視覺享受。

設備實現者提供了一個設備掩碼,它將決定設備上所有圖標的形狀。此圖示將用於任何使用啟動器圖示的系統 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 路徑定義標準。 Android 向量繪圖也支援這種 PathData 格式。

該路徑應該是凸形的,並且應該遵守視圖邊界內的安全區 (66/71 = 91%)。這是在一項 CTS 測試中強制執行的。

如果您決定使用圓形作為平台遮罩,請確保同時覆蓋 config_useRoundIcon = true。如果不是,請將此配置值設為 false 或不指定此配置值。

自適應圖示 API

AdaptiveIconDrawable類別的 API 如下所示:

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 傳回可繪製物件時,只需將其綁定到 ImageView 即可。這就是 Pre-O 平台中圖示的渲染方式。

關於渲染動態運動效果,Launcher3 (platform/packages/apps/Launcher3) 將有一個參考實現,展示如何在 O-MR1 中實現該效果。

驗證

為了驗證實現,在覆蓋他們喜歡的遮罩後,請查看圖示是否在 Launcher3、設定、概述和設定中正確呈現。您也可以在圖形 CTS TestCase 中執行 AdaptiveIconDrawableTest.java 和 AdaptiveIconMaskTest.java 來測試實作。

建議的手動測試案例可以在以下位置找到:platform/development/samples/AdaptiveIconSample/。

已知的問題

已知問題包括以下:

  • 圖示模糊,取決於遮罩路徑的定義方式。
  • 如果應用程式開發人員不使用Icon.createWithAdaptiveBitmap()方法或未正確使用此方法,則會放大捷徑圖示。為了使此方法正常運行,傳入的位圖應在所有四個邊上填充 25%。

這些問題可以透過以下方式解決:

  • 掩碼應在 [0, 100] x [0, 100] 座標系中定義。
  • 確保用於自適應圖示(啟動器圖示、捷徑)的影像在所有四個側面都有足夠的填充 (25%)。