導入自動調整圖示

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

裝置實作者會提供裝置遮罩,決定裝置上所有圖示的形狀。這個圖示會用於任何使用啟動器圖示的系統 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 格式也支援 Android 向量可繪圖。

這個路徑應為凸形,且應遵守檢視區域內的安全區 (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() 方法,或未正確使用此方法,則會顯示放大的捷徑圖示。為了讓這個方法正常運作,傳入的 Bitmap 應在四個邊緣上加上 25% 的邊框。

您可以按照下列步驟解決這些問題:

  • 遮罩應定義在 [0, 100] x [0, 100] 座標系統中。
  • 請確認用於自動調整圖示 (啟動器圖示、捷徑) 的圖片,四面都留有足夠的邊距 (25%)。