Пользовательские макеты уведомлений и цвета текста - PullRequest
78 голосов
/ 01 февраля 2011

Мое приложение отображает некоторые уведомления, и в зависимости от пользовательских настроек оно может использовать пользовательский макет в уведомлении.Работает хорошо, но есть небольшая проблема - цвета текста .В стандартном Android и почти во всех скинах производителей используется черный текст на светлом фоне для текста уведомлений, но Samsung этого не делает: их раскрывающийся список уведомлений имеет темный фон, а текст в макете уведомлений по умолчанию белый.

вызывает проблему: уведомления, которые не используют какие-либо причудливые макеты, отображаются нормально, но то, что использует пользовательский макет, трудно читать, потому что текст черный вместо белого по умолчанию.Даже официальная документация просто устанавливает #000 цвет для TextView, поэтому я не смог найти там никаких указателей.

Пользователь был достаточно любезен, чтобы сделать скриншотпроблема:

Итак, как мне использовать цвет текста уведомления по умолчанию с устройства в моих макетах?Я бы предпочел не начинать динамическое изменение цвета текста в зависимости от модели телефона, поскольку это требует большого обновления, и люди с пользовательскими ПЗУ могут по-прежнему сталкиваться с проблемой, в зависимости от используемой ими оболочки.

Ответы [ 11 ]

0 голосов
/ 05 марта 2016

Решение от @Malckom не помогло мне в Lolipop с темным фоном уведомлений из-за TextAppearance.Material.Notification.Title - системно-закодированный цвет.Решение от @grzaks сделал, но с некоторыми изменениями в процессе создания уведомлений:

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(this)
                          .setContentTitle(NOTIFICATION_TITLE_TIP)
                          .setContentText(NOTIFICATION_TEXT_TIP);
Notification ntf = mBuilder.build();
// ...
if (NOTIFICATION_TEXT_TIP.equals(szText)) {
    notification_text_color = text.getTextColors().getDefaultColor();
} else {
    if (NOTIFICATION_TITLE_TIP.equals(szText)) {
        notification_title_color = text.getTextColors().getDefaultColor();
    }
}
// ...
...