前言
上架Google Play最低SDK版本為8.0,在升級(jí)==targetSdkVersion = 26==然后在兼容測(cè)試的時(shí)候發(fā)現(xiàn)通知圖標(biāo)變成灰色不顯示圖標(biāo),啟動(dòng)圖標(biāo)多了一個(gè)外邊框,在調(diào)查后開啟圖標(biāo)適配填坑。
為什么要適配應(yīng)用圖標(biāo)
在當(dāng)前Android環(huán)境下,應(yīng)用圖標(biāo)功能是極其混亂的。截取了谷歌親兒子Nexus 5的系統(tǒng)菜單,
應(yīng)用圖標(biāo)可以是方形、圓形、圓角矩形、或者其他不規(guī)則圖形。

在Android 8.0 (API level 26) 安卓通過(guò)自適應(yīng)圖標(biāo)(Adaptive icons)意圖讓應(yīng)用圖標(biāo)的形狀都保持一致
8.0系統(tǒng)的應(yīng)用圖標(biāo)適配

官方Guide中把應(yīng)用圖標(biāo)被分為了兩層:前景圖片和背景圖片。
我們?cè)谠O(shè)計(jì)應(yīng)用圖標(biāo)的時(shí)候,需要將前景和背景分離,前景用來(lái)展示應(yīng)用圖標(biāo)的Logo,背景用來(lái)襯托應(yīng)用圖標(biāo)的Logo。需要注意的是,背景層在設(shè)計(jì)的時(shí)候只允許定義顏色和紋理,背景的形狀由系統(tǒng)決定。
如何適配
通過(guò)Android Studio新建項(xiàng)目其實(shí)已經(jīng)給了我們一個(gè)例子!

我們可以看到在Android Studio 3x中建立的項(xiàng)目多了一個(gè)++mipmap-anydpi-v26++文件夾,這個(gè)文件就是自適應(yīng)圖標(biāo),在manifest文件中也多了一個(gè)android:roundIcon設(shè)置。
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
那么我們得讓UI給我們切兩套圖?然后給5個(gè)應(yīng)用圖標(biāo)尺寸?其實(shí)Google提供Image Asset工具我們讓UI提供前景圖片和背景圖片然后用Image Asset就能生成所有圖標(biāo)。
Image Asset工具的使用
Image Asset Studio 可以幫助您生成以下圖標(biāo)類型:
- 啟動(dòng)器圖標(biāo)
- 操作欄和標(biāo)簽圖標(biāo)
- 通知圖標(biāo)
啟動(dòng)器圖標(biāo)
我先在iconfont上隨便找一個(gè)圖標(biāo)舉個(gè)例子
1.打開Image Asset工具

2.選擇你的icon

3.生成結(jié)果


通知圖標(biāo)
通知圖標(biāo)操作方式一樣,注意把icon Type換成Notification icons
通知5.0變更
- 使用 setColor() 在您的圖標(biāo)圖像后面的圓形中設(shè)置重點(diǎn)色彩。
- 更新或移除使用色彩的資源。系統(tǒng)在操作圖標(biāo)和主要通知圖標(biāo)中忽略所有非阿爾法通道。您應(yīng)假設(shè)這些圖標(biāo)僅支持阿爾法通道。系統(tǒng)用白色繪制通知圖標(biāo),用深灰色繪制操作圖標(biāo)。
*圖片需要無(wú)透明通道,簡(jiǎn)單點(diǎn)來(lái)說(shuō)就是沒(méi)有其他的顏色。
通知例子
private void sendNotification(String title, String body, PendingIntent pendingIntent) {
final String CHANNEL_ID = "channel_id";
final String CHANNEL_NAME = "channel_name";
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, CHANNEL_ID);
notificationBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND | NotificationCompat.DEFAULT_VIBRATE)
.setSmallIcon(R.drawable.ic_start_name)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_round))
.setColor(Color.parseColor("#9F9FA0"))
.setContentTitle(title)
.setContentText(body)
.setAutoCancel(true)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
if (notificationManager != null) {
notificationManager.createNotificationChannel(notificationChannel);
}
}
notificationManager.notify(0, notificationBuilder.build());
}
總結(jié)
通過(guò)Android Studio的Image Asset工具會(huì)自動(dòng)幫我們生成適配系統(tǒng)的應(yīng)用圖標(biāo),以后寫Demo也能自己做一個(gè)漂亮的圖標(biāo)了。