自動調整圖示會在裝置內維持一致的形狀,但會因裝置而異,且僅由開發人員提供一個圖示素材資源。此外,圖示支援兩個圖層 (前景和背景),可用於動畫,為使用者提供視覺享受。
裝置實作者會提供裝置遮罩,決定裝置上所有圖示的形狀。這個圖示會用於任何使用啟動器圖示的系統 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%)。