Android 5+ пользовательское уведомление XML-макет с RemoteViews, установите правильный значок для ImageButton
Мое приложение использует настраиваемый макет уведомлений с помощью RemoteViews.
Чтобы отобразить текст, макет использует следующие стили системы:
android:TextAppearance.Material.Notification.Title
android:TextAppearance.Material.Notification
Это отлично работает.
Однако стиль TextAppearance нельзя использовать для установки значения android:tint
, поэтому мне пришлось жестко кодировать цвет.
К моему лучшему знанию, нет специального стиля системы для установки уведомления ImageButton tint.
Жестко закодированные цвета отлично работают в текущих системах Android 5+, но некоторые пользователи устанавливают пользовательские ПЗУ с настраиваемыми темными темами, и уведомление выглядит неправильно, т.е. черные значки на черном фоне.
Есть ли способ получить значок системного уведомления/цветной картинки и применить его к XML-макету?
Или, может быть, есть еще один способ добиться этого?
Ответы
Ответ 1
Извините, но, согласно моим знаниям, пользовательские ПЗУ имеют отдельные системные проекты, конфигурации и не являются официальными.
Таким образом, поддержка Custom ROM без знания его дизайна невозможна.
И андроидные API предназначены для поддержки официальных ROM.
Надеюсь, что это поможет!
Ответ 2
Попробуйте этот пример:
* Def: *
public static Bitmap icon ;
icon = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.YOUR_IMAGE);
mBuilder = new NotificationCompat.Builder(this);
mBuilder.setShowWhen(false);
mBuilder.setDefaults(Notification.DEFAULT_ALL);
mBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
mBuilder.setSmallIcon(R.drawable.image1);
mBuilder.setContentText("this text not visible");
mBuilder.setLargeIcon(icon);
mBuilder.setPriority(Notification.PRIORITY_DEFAULT);
mBuilder.setContent(contentNotifySmall); // ORI
//mBuilder.setAutoCancel(false);
mBuilder.setCustomBigContentView(contentNotify);
Ответ 3
Вы можете использовать notificationlistenerservice для получения активного уведомления. Это возвращает список StatusBarNotifications, а затем просто:
StatusBarNotifcation sBNotification = activeNotifications[0];
Notification notification = sBNotification.getNotification();
int argbColor = notification.color;
Ответ 4
Если вы измените ImageButton на ImageView в своем макете, вы можете обновить его с помощью
RemoteViews remoteView = getRemoteViews(context);
// load base icon from res
Bitmap baseIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.base_icon);
// edit Bitmap baseIcon any way for your choose
Bitmap editedBitmap = ...
// update notification view with edited Bitmap
remoteView.setImageViewBitmap(R.id.button_icon, edited);
P.S. вы можете редактировать Bitmap следующим образом:
fooobar.com/questions/185356/... или любым другим способом
Надеюсь, что это поможет
Ответ 5
для фона вы можете попробовать эти атрибуты...
app:backgroundTint="@color/pay"
--------- Или -------------
android:tint="@color/white"