web-dev-qa-db-ja.com

Android背景色が白の場合、通知アイコンの色は変更されません

Android 6.0にアップグレードしましたが、アプリに問題があります。

ステータスバーの背景色が白でない場合、通知アイコンは良好です。 (通知アイコンpngには白とアルファのみが含まれています)

しかし、一部のアプリが背景色を白に変更しても、通知アイコンが黒に反転しません。

ステータスバーの背景色が他のアプリによって白に設定されているときに、白い通知アイコンを黒に反転させるにはどうすればよいですか? (色アイコンの使い方は言うつもりはありません。)

下の画像は問題を示しています。

通常の状態

背景色を白に変更すると、アイコンは黒に変更されません

  • 通知ビルドコード

    Notification.Builder mBuilder =
            new Notification.Builder(context)
                    .setSmallIcon(R.drawable.ic_notifications_none)
                    .setPriority(priority2)
                    .setOngoing(true);
    
    mBuilder.setContent(generateMessageView(message));
    
    Intent notificationIntent = new Intent(context, MainActivity.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
                              | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
    PendingIntent intent = PendingIntent.getActivity(context, 0,
            notificationIntent, 0);
    NotificationManager mNotificationManager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    mBuilder.setContentIntent(intent);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    
  • values-v23/styles.xml

    <style name="AppTheme" parent="Android:Theme.Material.NoActionBar">            
    </style>
    

**解決策を見つけました**

通知アイコンをdrawable- * dpiではなくdrawableディレクトリに追加しました。今それは働いています。

16
Jiyoung Kim

答えるのは遅いですが、同じ問題を抱えている他の人にとっては、

私にもこの問題があり、グラフィックアイコンに問題があることがわかりました。このオンラインツールを使用して問題を解決できます。このリンクを開く:

https://romannurik.github.io/AndroidAssetStudio/icons-notification.html#source.type=image&source.space.trim=1&source.space.pad=0&name=ic_stat_call_white

画像を選択し(サイズが大きい)、リソースをダウンロードしてプロジェクトにコピーします。

最後に、.setSmallIcon(R.drawable.ICON_NEW_NAME)を使用して通知アイコンを設定します

お役に立てれば

12
Nobody8

問題はデバイスAndroid 5.0以上)にあると思います。

https://developer.Android.com/design/patterns/notifications.html
https://developer.Android.com/about/versions/Android-5.0-changes.html

これが解決策です:

_Notification notification = new Notification.Builder(context)
        .setAutoCancel(true)
        .setContentTitle("My notification")
        .setContentText("Look, white in Lollipop, else color!")
        .setSmallIcon(getNotificationIcon())
        .build();

return notification;
_

およびメソッドgetNotificationIcon()

_private int getNotificationIcon() {
    boolean useWhiteIcon = (Android.os.Build.VERSION.SDK_INT >= Android.os.Build.VERSION_CODES.Lollipop);
    return useWhiteIcon ? R.drawable.icon_black : R.drawable.ic_nomarl;
}
_