Android 應(yīng)用icon適配

前言

上架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ī)則圖形。

Nexus 5

在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

image

官方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è)例子!

sample

我們可以看到在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工具

WX20190103-172516.png

2.選擇你的icon

WX20190103-172701.png

3.生成結(jié)果

ic_launcher_round.png
ic_launcher.png
通知圖標(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)了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容