實作自動調整圖示

自動調整圖示在裝置上保有一致性,但形狀會因裝置而異 其中只含一個開發人員提供的圖示素材資源。此外,圖示 支援兩層 (前景和背景),可用來 讓使用者享有絕佳視覺體驗

裝置實作器提供裝置遮罩,可決定裝置上所有圖示的形狀 裝置。這個圖示會用於採用啟動器圖示的所有系統 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 大會平台上呈現的圖示。

關於轉譯動態動態效果,啟動器 3 (平台/套件/應用程式/啟動器 3) 會提供參考實作, 如何在 O-MR1 中達到效果

驗證

如要驗證實作項目,在覆寫喜歡的遮罩後,請參閱 圖示是否在 Launcher3、設定、總覽和設定中正確顯示。 您也可以執行 AdaptiveIconDrawableTest.java 和 AdaptiveIconMaskTest.java ,以測試實作結果

如需建議的手動測試案例,請前往: Platform/development/samples/AdaptiveIconSample/。

已知問題

已知問題包括:

  • 模糊圖示視遮罩路徑的定義方式而定。
  • 放大的捷徑圖示 (如果應用程式開發人員未使用 Icon.createWithAdaptiveBitmap() 方法,或不要使用這個方法 正確做法。如要讓這個方法正常運作,應使用點陣圖中傳遞的 四邊增加了 25%

這些問題的解決方式如下:

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