Android アプリ通知のアイコンは"白と透過"で用意する

はじめに

今回はアプリの通知(Push通知)のスモールアイコンについて解説したいと思います。
このスモールアイコンですが、実は奥が深くバージョン差異が多いので、注意が必要です。

通知に関する概要のリンクを貼っておきます。 developer.android.com

スモールアイコンとは

スモールアイコンとは、以下の画像の①のことです。
通知に関する概要でも説明されていますが、 setSmallIcon() で設定する画像ですね。 また、ステータスバーにも表示されているのも同じくスモールアイコンです。(色が変わってますね)

val builder = NotificationCompat.Builder(this, id).apply {
    setContentTitle(getString(R.string.notification_title))
    setContentText(data.message)
    setSmallIcon(R.mipmap.ic_notification_small) ←コレ
    // 省略
}

f:id:QoopMk:20191014175329p:plain

f:id:QoopMk:20191014175222p:plain

この通知自体の表示もバージョンによって異なるので、通知バー自体のUIの違いについてはこちらを参考にどうぞ。

phicdy.hatenablog.com

バージョンまたは条件ごとに表示が異なる

通知の色をコードで指定しなかった場合

バージョン 表示
7.0 端末に依存する。通知アイコンはグレー表示されたり、元のアイコンカラーになる。
8.0 通知アイコンは元のアイコン画像の色(オレンジ), 通知テキストはAndroid側により指定(グレー)
9.0~ 通知アイコン、通知テキストの色はAndroid側により指定されてしまう

通知の色をコードで指定した場合

バージョン 表示
7.0~8.0 通知アイコン・テキストは指定した色になる。コントラスト的にふさわしくない場合は色が変更される。
9.0~ 通知アイコンのみ指定した色になる。コントラスト的にふさわしくない場合は色が変更される。

スモールアイコンは"白と透過"で用意

バージョン差異だったり、端末依存だったり、とてもめんどくさいですよね。
なので、通知アイコンの画像は色は「白」と「透過」だけで用意するのが鉄則です。(というかそれが推奨されています)

こんな画像が理想

カラー:黒の部分が透過・白の部分が白のPNG画像
サイズ:128x128px

f:id:QoopMk:20191014183629p:plain

ImageAssetで作成

以下のすべてのサイズが必要になるのですが、ImageAsset機能を使えばすべてのサイズにわけてインポートしてくれます。
一番大きなサイズである128x128pxを用意しておきましょう。

mdpi 32x32
hdpi 48x48
xhdpi 64x64
xxhdpi 96x96
xxxhdpi 128x128

ImageAssetを起動

f:id:QoopMk:20191014183016p:plain

タブをNotification Iconsに切り替える

f:id:QoopMk:20191014183010p:plain

独自の画像を設定する場合はAssetTypeをImageにして設定する

f:id:QoopMk:20191014183006p:plain