2016-11-29 3 views
5

Я проблема устанавливающего уведомления маленького значок на желтый в Android 7.xНельзя использовать желтым с небольшим значком Android нуги уведомлений,

Я использую notification.setColor(Color.YELLOW); при строительстве объекта уведомления. Он показывает, что цвет оливы (иш) вместо желтого.

Также старался использовать notification.setColor(Color.argb(255,255,255,0));, но не повезло, он показывает тот же цвет оливы (ish).

Вот как это выглядит в Android 7.x

Android 7.1

Вот как это выглядит в Android 6.x, который является правильный цвет

Android 6.x

Оба изображения отображают одно и то же уведомление с той же базой кода, но с использованием разных устройств Android.

Я использую PushWoosh для отправки/получения push-уведомлений, ниже - точный код, который я использую для создания объекта уведомления.

public class NotificationFactory extends AbsNotificationFactory { 
@Override 
public Notification onGenerateNotification(PushData pushData) { 
    PushwooshUserdata pushwooshUserdata = GsonUtil.fromJson(pushData.getExtras().getString("u"), PushwooshUserdata.class); 

    //create notification builder 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getContext()); 
    notificationBuilder.setContentTitle("Header"); 
    notificationBuilder.setContentText("Message"); 

    //set small icon (usually app icon) 
    notificationBuilder.setSmallIcon(R.drawable.notification_icon); 
    notificationBuilder.setColor(Color.argb(255,255,255,0)); 

    //set ticket text 
    notificationBuilder.setTicker(getContentFromHtml(pushData.getTicker())); 

    //display notification now 
    notificationBuilder.setWhen(System.currentTimeMillis()); 

    //build the notification 
    final Notification notification = notificationBuilder.build(); 

    //add sound 
    addSound(notification, pushData.getSound()); 

    //add vibration 
    addVibration(notification, pushData.getVibration()); 

    //make it cancelable 
    addCancel(notification); 

    //all done! 
    return notification; 
} 

@Override 
public void onPushReceived(PushData pushData) { 
} 

@Override 
public void onPushHandle(Activity activity) { 
} 
} 
+0

Возможно, было бы полезно описать немного больше о том, как вы создаете свои уведомления – Chisko

+0

Спасибо @Chisko, я обновил вопрос, чтобы включить точный код, который я использую. –

ответ

5

Android является обеспечение минимального коэффициента контрастности между цветом переднего плана и цвет фона.

С желтым (# ffff35) передним планом и на белом фоне коэффициент контрастности составляет всего 1,07: 1.

Оливковый передний план (# 717d13) имеет минимальный коэффициент контрастности 4,5: 1.

Это соответствующий патч в источнике Android: https://android.googlesource.com/platform/frameworks/base.git/+/4ff3b120ff8a788e3afeb266d18caf072f0b8ffb%5E%21/

Я вычислил выше коэффициент контрастности с использованием http://webaim.org/resources/contrastchecker/.

+0

Спасибо @ eric-fikus. В этом причина этого. –

+0

Я провел несколько тестов с цветами, которые дают контрастность менее 4,5: 1 с белым цветом, и он всегда заканчивается, приобретая другой цвет, чем тот, который я выбрал, и, вычисляя контраст нового цвета, он всегда выше 4,5. Вы спасли мой день! –

0

Try, чтобы гарантировать, что элементы управления пользовательского интерфейса в уведомлении также доступны в Activity в вашем приложении, и вы всегда должны начать эту активность, когда пользователи нажимают на уведомление. Для этого используйте метод setContentIntent().

, если вы определили цвет в colors.xml то в вашей NotificationBuilder добавить значение в качестве .setColor(getResources().getColor(R.color.<YOUR_COLOR>))

Источник: NotificationCompat.Builder#setColor(int)